mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: When disagreeing with a flag that silenced a user, unsilence them
Previously it would unhide their post but leave them silenced. This fix also cleans up some of the helper classes to make it easier to pass extra data to the silencing code (for example, a link to the post that caused the user to be silenced.) This patch also refactors the auto_silence specs to avoid using stubs.
This commit is contained in:
@@ -1,37 +1,38 @@
|
||||
class SpamRule::AutoSilence
|
||||
|
||||
def initialize(user)
|
||||
attr_reader :group_message
|
||||
|
||||
def initialize(user, post = nil)
|
||||
@user = user
|
||||
end
|
||||
|
||||
def self.silence?(user)
|
||||
self.new(user).silence?
|
||||
end
|
||||
|
||||
def self.punish!(user)
|
||||
self.new(user).silence_user
|
||||
@post = post
|
||||
end
|
||||
|
||||
def perform
|
||||
silence_user if silence?
|
||||
I18n.with_locale(SiteSetting.default_locale) do
|
||||
silence_user if should_autosilence?
|
||||
end
|
||||
end
|
||||
|
||||
def silence?
|
||||
return true if @user.silenced?
|
||||
def self.prevent_posting?(user)
|
||||
user.blank? || user.silenced? || new(user).should_autosilence?
|
||||
end
|
||||
|
||||
def should_autosilence?
|
||||
return false if @user.blank?
|
||||
return false if @user.staged?
|
||||
return false if @user.has_trust_level?(TrustLevel[1])
|
||||
|
||||
if SiteSetting.num_spam_flags_to_silence_new_user > (0) &&
|
||||
SiteSetting.num_users_to_silence_new_user > (0) &&
|
||||
num_spam_flags_against_user >= (SiteSetting.num_spam_flags_to_silence_new_user) &&
|
||||
num_users_who_flagged_spam_against_user >= (SiteSetting.num_users_to_silence_new_user)
|
||||
if SiteSetting.num_spam_flags_to_silence_new_user > 0 &&
|
||||
SiteSetting.num_users_to_silence_new_user > 0 &&
|
||||
num_spam_flags_against_user >= SiteSetting.num_spam_flags_to_silence_new_user &&
|
||||
num_users_who_flagged_spam_against_user >= SiteSetting.num_users_to_silence_new_user
|
||||
return true
|
||||
end
|
||||
|
||||
if SiteSetting.num_tl3_flags_to_silence_new_user > (0) &&
|
||||
SiteSetting.num_tl3_users_to_silence_new_user > (0) &&
|
||||
num_tl3_flags_against_user >= (SiteSetting.num_tl3_flags_to_silence_new_user) &&
|
||||
num_tl3_users_who_flagged >= (SiteSetting.num_tl3_users_to_silence_new_user)
|
||||
if SiteSetting.num_tl3_flags_to_silence_new_user > 0 &&
|
||||
SiteSetting.num_tl3_users_to_silence_new_user > 0 &&
|
||||
num_tl3_flags_against_user >= SiteSetting.num_tl3_flags_to_silence_new_user &&
|
||||
num_tl3_users_who_flagged >= SiteSetting.num_tl3_users_to_silence_new_user
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -72,8 +73,16 @@ class SpamRule::AutoSilence
|
||||
|
||||
def silence_user
|
||||
Post.transaction do
|
||||
if UserSilencer.silence(@user, Discourse.system_user, message: :too_many_spam_flags) && SiteSetting.notify_mods_when_user_silenced
|
||||
GroupMessage.create(Group[:moderators].name, :user_automatically_silenced, user: @user, limit_once_per: false)
|
||||
|
||||
silencer = UserSilencer.new(
|
||||
@user,
|
||||
Discourse.system_user,
|
||||
message: :too_many_spam_flags,
|
||||
post_id: @post&.id
|
||||
)
|
||||
|
||||
if silencer.silence && SiteSetting.notify_mods_when_user_silenced
|
||||
@group_message = GroupMessage.create(Group[:moderators].name, :user_automatically_silenced, user: @user, limit_once_per: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,11 +5,13 @@ class SpamRule::FlagSockpuppets
|
||||
end
|
||||
|
||||
def perform
|
||||
if SiteSetting.flag_sockpuppets && reply_is_from_sockpuppet?
|
||||
flag_sockpuppet_users
|
||||
true
|
||||
else
|
||||
false
|
||||
I18n.with_locale(SiteSetting.default_locale) do
|
||||
if SiteSetting.flag_sockpuppets && reply_is_from_sockpuppet?
|
||||
flag_sockpuppet_users
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user