aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar kosayoda <[email protected]>2020-09-07 21:08:54 +0800
committerGravatar kosayoda <[email protected]>2020-09-07 21:08:54 +0800
commit0c6215f3f6e7247a5e13199931f733a8e203047e (patch)
tree5ff23a440690734e0052f21fcef60e409ce3b422
parentAdd 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.py1
-rw-r--r--bot/rules/__init__.py1
-rw-r--r--bot/rules/everyone_ping.py44
-rw-r--r--config-default.yml4
-rw-r--r--tests/bot/rules/test_everyone_ping.py102
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"