diff options
| author | 2020-09-07 21:08:54 +0800 | |
|---|---|---|
| committer | 2020-09-07 21:08:54 +0800 | |
| commit | 0c6215f3f6e7247a5e13199931f733a8e203047e (patch) | |
| tree | 5ff23a440690734e0052f21fcef60e409ce3b422 | |
| parent | Add test for everyone_ping rule. (diff) | |
Remove everyone_ping rule from antispam.
The feature will be moved to the filtering cog.
| -rw-r--r-- | bot/cogs/antispam.py | 1 | ||||
| -rw-r--r-- | bot/rules/__init__.py | 1 | ||||
| -rw-r--r-- | bot/rules/everyone_ping.py | 44 | ||||
| -rw-r--r-- | config-default.yml | 4 | ||||
| -rw-r--r-- | tests/bot/rules/test_everyone_ping.py | 102 | 
5 files changed, 0 insertions, 152 deletions
diff --git a/bot/cogs/antispam.py b/bot/cogs/antispam.py index b8939113f..5c97621fb 100644 --- a/bot/cogs/antispam.py +++ b/bot/cogs/antispam.py @@ -36,7 +36,6 @@ RULE_FUNCTION_MAPPING = {      'mentions': rules.apply_mentions,      'newlines': rules.apply_newlines,      'role_mentions': rules.apply_role_mentions, -    'everyone_ping': rules.apply_everyone_ping,  } diff --git a/bot/rules/__init__.py b/bot/rules/__init__.py index 8a69cadee..a01ceae73 100644 --- a/bot/rules/__init__.py +++ b/bot/rules/__init__.py @@ -10,4 +10,3 @@ from .links import apply as apply_links  from .mentions import apply as apply_mentions  from .newlines import apply as apply_newlines  from .role_mentions import apply as apply_role_mentions -from .everyone_ping import apply as apply_everyone_ping diff --git a/bot/rules/everyone_ping.py b/bot/rules/everyone_ping.py deleted file mode 100644 index 8fc03b924..000000000 --- a/bot/rules/everyone_ping.py +++ /dev/null @@ -1,44 +0,0 @@ -import random -import re -from typing import Dict, Iterable, List, Optional, Tuple - -from discord import Embed, Member, Message - -from bot.constants import Colours, Guild, NEGATIVE_REPLIES - -# Generate regex for checking for pings: -guild_id = Guild.id -EVERYONE_PING_RE = re.compile(rf"@everyone|<@&{guild_id}>") -CODE_BLOCK_RE = re.compile( -    r"(?P<delim>``?)[^`]+?(?P=delim)(?!`+)"  # Inline codeblock -    r"|```(.+?)```",  # Multiline codeblock -    re.DOTALL | re.MULTILINE -) - - -async def apply( -    last_message: Message, -    recent_messages: List[Message], -    config: Dict[str, int], -) -> Optional[Tuple[str, Iterable[Member], Iterable[Message]]]: -    """Detects if a user has sent an '@everyone' ping.""" -    relevant_messages = tuple(msg for msg in recent_messages if msg.author == last_message.author) - -    everyone_messages_count = 0 -    for msg in relevant_messages: -        content = CODE_BLOCK_RE.sub("", msg.content)  # Remove codeblocks in the message -        if matches := len(EVERYONE_PING_RE.findall(content)): -            everyone_messages_count += matches - -    if everyone_messages_count > config["max"]: -        # Send the channel an embed giving the user more info: -        embed_text = f"Please don't try to ping {last_message.guild.member_count:,} people." -        embed = Embed(title=random.choice(NEGATIVE_REPLIES), description=embed_text, colour=Colours.soft_red) -        await last_message.channel.send(embed=embed) - -        return ( -            "pinged the everyone role", -            (last_message.author,), -            relevant_messages, -        ) -    return None diff --git a/config-default.yml b/config-default.yml index e9324c62f..c1eef713f 100644 --- a/config-default.yml +++ b/config-default.yml @@ -389,10 +389,6 @@ anti_spam:              interval: 10              max: 3 -        everyone_ping: -            interval: 10 -            max: 0 -  reddit:      subreddits: diff --git a/tests/bot/rules/test_everyone_ping.py b/tests/bot/rules/test_everyone_ping.py deleted file mode 100644 index 3ecc43cdc..000000000 --- a/tests/bot/rules/test_everyone_ping.py +++ /dev/null @@ -1,102 +0,0 @@ -from typing import Iterable - -from bot.rules import everyone_ping -from tests.bot.rules import DisallowedCase, RuleTest -from tests.helpers import MockGuild, MockMessage - -NUM_GUILD_MEMBERS = 100 - - -def make_msg(author: str, message: str) -> MockMessage: -    """Build a message with `message` as the content sent.""" -    mocked_guild = MockGuild(member_count=NUM_GUILD_MEMBERS) -    return MockMessage(author=author, content=message, guild=mocked_guild) - - -class EveryonePingRuleTest(RuleTest): -    """Tests the `everyone_ping` antispam rule.""" - -    def setUp(self): -        self.apply = everyone_ping.apply -        self.config = { -            "max": 0,  # Max allowed @everyone pings per user -            "interval": 10, -        } - -    async def test_disallows_everyone_ping(self): -        """Cases with an @everyone ping.""" -        cases = ( -            DisallowedCase( -                [make_msg("bob", "@everyone")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "Let me ping @everyone in the server.")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "`codeblock message` and @everyone ping")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "`sandwich` @everyone `ping between codeblocks`.")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "This is a multiline\n@everyone\nping.")], -                ("bob",), -                1 -            ), -            # Not actually valid code blocks -            DisallowedCase( -                [make_msg("bob", "`@everyone``")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "`@everyone``````")], -                ("bob",), -                1 -            ), -            DisallowedCase( -                [make_msg("bob", "``@everyone``````")], -                ("bob",), -                1 -            ), -        ) - -        await self.run_disallowed(cases) - -    async def test_allows_inline_codeblock_everyone_ping(self): -        """Cases with an @everyone ping in an inline codeblock.""" -        cases = ( -            [make_msg("bob", "Codeblock has `@everyone` ping.")], -            [make_msg("bob", "Multiple `codeblocks` including `@everyone` ping.")], -            [make_msg("bob", "This is a valid ``inline @everyone` ping.")], -        ) - -        await self.run_allowed(cases) - -    async def test_allows_multiline_codeblock_everyone_ping(self): -        """Cases with an @everyone ping in a multiline codeblock.""" -        cases = ( -            [make_msg("bob", "```Multiline codeblock has\nan `@everyone` ping.```")], -            [make_msg("bob", "``` `@everyone``` ` `")], -        ) - -        await self.run_allowed(cases) - -    def relevant_messages(self, case: DisallowedCase) -> Iterable[MockMessage]: -        last_message = case.recent_messages[0] -        return tuple( -            msg -            for msg in case.recent_messages -            if msg.author == last_message.author -        ) - -    def get_report(self, case: DisallowedCase) -> str: -        return "pinged the everyone role"  |