diff --git a/example-conf.yml b/example-conf.yml index 20023b4..e21fc47 100644 --- a/example-conf.yml +++ b/example-conf.yml @@ -846,8 +846,8 @@ stats: #enabled: true # Sets the punishment that Antispam should use against mass highlighters. - # Valid values include "kill", "kick", "ban", "quiet", and combinations of these strung - # together with "+" (e.g. "kick+ban"). Defaults to "kick+ban" if not set. + # Valid values include "kill", "kick", "ban", "quiet", "block", and combinations of these + # strung together with "+" (e.g. "kick+ban"). Defaults to "kick+ban" if not set. #punishment: kick+ban # Sets the kick / kill message used when mass highlight prevention is triggered. @@ -868,10 +868,10 @@ stats: # Sets the punishment that Antispam's text spamfilter should use. # Valid values include "kill", "kick", "ban", "quiet", and combinations of these strung - # together with "+" (e.g. "kick+ban"). Defaults to "kick+ban" if not set. + # together with "+" (e.g. "kick+ban"). Defaults to "kick+ban+block" if not set. # If you want Antispam to also monitor PM spam, you will want to change this to something - # not channel-specific (such as "kill"). - #punishment: kick+ban + # not channel-specific (such as "kill" or "block"). + #punishment: kick+ban+block # Sets the kick / kill message used when the text spamfilter is triggered. #reason: "Spam is prohibited" diff --git a/plugins/antispam.py b/plugins/antispam.py index ef67e0c..a8f7d62 100644 --- a/plugins/antispam.py +++ b/plugins/antispam.py @@ -11,7 +11,7 @@ sbot = utils.register_service("antispam", default_nick="AntiSpam", desc=mydesc) def die(irc=None): utils.unregister_service("antispam") -PUNISH_OPTIONS = ['kill', 'ban', 'quiet', 'kick'] +PUNISH_OPTIONS = ['kill', 'ban', 'quiet', 'kick', 'block'] EXEMPT_OPTIONS = ['voice', 'halfop', 'op'] DEFAULT_EXEMPT_OPTION = 'halfop' def _punish(irc, target, channel, punishment, reason): @@ -81,6 +81,9 @@ def _punish(irc, target, channel, punishment, reason): 'these joined together with a "+".', irc.name, punishment, ', '.join(PUNISH_OPTIONS)) return + elif action == 'block': + # We only need to increment this for this function to return True + successful_punishments += 1 elif action == 'kill': kill = True # Delay kills so that the user data doesn't disappear. # XXX factorize these blocks @@ -122,6 +125,10 @@ def _punish(irc, target, channel, punishment, reason): else: successful_punishments += 1 + if not successful_punishments: + log.warning('(%s) antispam: Failed to punish %s with %r, target was %s', irc.name, + target_nick, punishment, channel or 'a PM') + return bool(successful_punishments) MASSHIGHLIGHT_DEFAULTS = { @@ -204,7 +211,7 @@ utils.add_hook(handle_masshighlight, 'NOTICE', priority=1000) TEXTFILTER_DEFAULTS = { 'reason': "Spam is prohibited", - 'punishment': 'kick+ban', + 'punishment': 'kick+ban+block', 'watch_pms': 'false', 'enabled': False }