mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-04-27 03:00:12 -04:00
Send events on muted user forbidden actions
If a muted user attempts to message a subreddit, the details text is "muted". If a subreddit attempts to message a user that has been muted, the details text is "muted mod".
This commit is contained in:
@@ -354,7 +354,6 @@ class ApiController(RedditController):
|
||||
if (form.has_errors("to",
|
||||
errors.USER_DOESNT_EXIST, errors.NO_USER,
|
||||
errors.SUBREDDIT_NOEXIST, errors.USER_BLOCKED,
|
||||
errors.USER_MUTED,
|
||||
) or
|
||||
form.has_errors("subject", errors.NO_SUBJECT) or
|
||||
form.has_errors("subject", errors.TOO_LONG) or
|
||||
@@ -364,6 +363,11 @@ class ApiController(RedditController):
|
||||
form.has_errors("from_sr", errors.SUBREDDIT_NOEXIST)):
|
||||
return
|
||||
|
||||
if form.has_errors("to", errors.USER_MUTED):
|
||||
g.events.muted_forbidden_event("muted", target=to,
|
||||
request=request, context=c)
|
||||
return
|
||||
|
||||
if from_sr and isinstance(to, Subreddit):
|
||||
c.errors.add(errors.NO_SR_TO_SR_MESSAGE, field="from")
|
||||
form.has_errors("from", errors.NO_SR_TO_SR_MESSAGE)
|
||||
@@ -385,6 +389,8 @@ class ApiController(RedditController):
|
||||
elif from_sr.is_muted(to) and not c.user_is_admin:
|
||||
c.errors.add(errors.MUTED_FROM_SUBREDDIT, field="to")
|
||||
form.has_errors("to", errors.MUTED_FROM_SUBREDDIT)
|
||||
g.events.muted_forbidden_event("muted mod", subreddit=from_sr,
|
||||
target=to, request=request, context=c)
|
||||
return
|
||||
m, inbox_rel = Message._new(c.user, to, subject, body, request.ip,
|
||||
sr=from_sr, from_sr=True)
|
||||
@@ -1959,14 +1965,24 @@ class ApiController(RedditController):
|
||||
user_muted_error = False
|
||||
if sr.is_muted(message.author_slow):
|
||||
user_muted_error = True
|
||||
muted_user = message.author_slow
|
||||
elif message.to_id and sr.is_muted(message.recipient_slow):
|
||||
user_muted_error = True
|
||||
muted_user = message.recipient_slow
|
||||
|
||||
if user_muted_error:
|
||||
if sr.is_moderator(c.user):
|
||||
c.errors.add(errors.MUTED_FROM_SUBREDDIT, field="parent")
|
||||
g.events.muted_forbidden_event("muted mod",
|
||||
sr, parent_message=parent, target=muted_user,
|
||||
request=request, context=c,
|
||||
)
|
||||
else:
|
||||
c.errors.add(errors.USER_MUTED, field="parent")
|
||||
g.events.muted_forbidden_event("muted",
|
||||
parent_message=parent, target=sr,
|
||||
request=request, context=c,
|
||||
)
|
||||
|
||||
is_message = True
|
||||
should_ratelimit = False
|
||||
|
||||
@@ -248,6 +248,44 @@ class EventQueue(object):
|
||||
|
||||
self.save_event(event_base)
|
||||
|
||||
@squelch_exceptions
|
||||
def muted_forbidden_event(self, details_text, subreddit=None,
|
||||
parent_message=None, target=None, request=None, context=None):
|
||||
"""Create a mute-related 'forbidden_event' for event-collector.
|
||||
|
||||
details_text: "muted" if a muted user is trying to message the
|
||||
subreddit or "muted mod" if the subreddit mod is attempting
|
||||
to message the muted user
|
||||
subreddit: The Subreddit of the mod messaging the muted user
|
||||
parent_message: Message that is being responded to
|
||||
target: The intended recipient (Subreddit or Account)
|
||||
request, context: Should be pylons.request & pylons.c respectively;
|
||||
|
||||
"""
|
||||
event = EventV2(
|
||||
topic="forbidden_actions",
|
||||
event_type="ss.forbidden_message_attempt",
|
||||
request=request,
|
||||
context=context,
|
||||
)
|
||||
event.add("details_text", details_text)
|
||||
|
||||
if parent_message:
|
||||
event.add("parent_message_id", parent_message._id)
|
||||
event.add("parent_message_fullname", parent_message._fullname)
|
||||
|
||||
if subreddit:
|
||||
event.add("sr_id", subreddit._id)
|
||||
event.add("sr_name", subreddit.name)
|
||||
|
||||
if target:
|
||||
event.add("target_id", target._id)
|
||||
event.add("target_fullname", target._fullname)
|
||||
event.add("target_name", target.name)
|
||||
event.add("target_type", target.__class__.__name__.lower())
|
||||
|
||||
self.save_event(event)
|
||||
|
||||
@squelch_exceptions
|
||||
@sampled("events_collector_mod_sample_rate")
|
||||
def mod_event(self, modaction, subreddit, mod, target=None,
|
||||
|
||||
Reference in New Issue
Block a user