aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/cogs/filtering.py42
-rw-r--r--bot/constants.py73
-rw-r--r--config-default.yml102
3 files changed, 157 insertions, 60 deletions
diff --git a/bot/cogs/filtering.py b/bot/cogs/filtering.py
new file mode 100644
index 000000000..23b0d9e96
--- /dev/null
+++ b/bot/cogs/filtering.py
@@ -0,0 +1,42 @@
+import logging
+import re
+
+from discord import Message
+from discord.ext.commands import Bot
+
+from bot.constants import Channels
+
+log = logging.getLogger(__name__)
+
+
+class Filtering:
+ """
+ Filtering out invites, blacklisting domains,
+ and preventing certain expressions"""
+
+ def __init__(self, bot: Bot):
+ self.bot = bot
+
+ async def on_message(self, msg: Message):
+
+ has_zalgo = await self._filter_zalgo(msg.content)
+
+ if has_zalgo:
+ self.bot.get_channel(Channels.modlog).send(
+ content="ZALGO!"
+ )
+
+ @staticmethod
+ async def _has_zalgo(text):
+ """
+ Returns True if the text contains zalgo characters.
+
+ Zalgo range is \u0300 – \u036F and \u0489.
+ """
+
+ return bool(re.search(r"[\u0300-\u036F\u0489]", text))
+
+
+def setup(bot: Bot):
+ bot.add_cog(Filtering(bot))
+ log.info("Cog loaded: Filtering")
diff --git a/bot/constants.py b/bot/constants.py
index adfd5d014..834c14fd8 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -191,6 +191,51 @@ class Bot(metaclass=YAMLGetter):
token: str
+class Filtering(metaclass=YAMLGetter):
+ section = "filtering"
+
+ filter_zalgo: bool
+ filter_invites: bool
+ filter_domain: bool
+ watch_expressions: bool
+
+ domain_blacklist: List[str]
+ watched_expressions: List[str]
+ guild_invite_whitelist: List[str]
+
+ channel_whitelist: List[int]
+ role_whitelist: List[int]
+
+
+class Channels(metaclass=YAMLGetter):
+ section = "guild"
+ subsection = "channels"
+
+ admins: int
+ announcements: int
+ big_brother_logs: int
+ bot: int
+ checkpoint_test: int
+ devalerts: int
+ devlog: int
+ devtest: int
+ help_0: int
+ help_1: int
+ help_2: int
+ help_3: int
+ help_4: int
+ help_5: int
+ helpers: int
+ message_log: int
+ modlog: int
+ off_topic_1: int
+ off_topic_2: int
+ off_topic_3: int
+ python: int
+ staff_lounge: int
+ verification: int
+
+
class Cooldowns(metaclass=YAMLGetter):
section = "bot"
subsection = "cooldowns"
@@ -245,34 +290,6 @@ class Icons(metaclass=YAMLGetter):
user_update: str
-class Channels(metaclass=YAMLGetter):
- section = "guild"
- subsection = "channels"
-
- admins: int
- announcements: int
- big_brother_logs: int
- bot: int
- checkpoint_test: int
- devalerts: int
- devlog: int
- devtest: int
- help_0: int
- help_1: int
- help_2: int
- help_3: int
- help_4: int
- help_5: int
- helpers: int
- message_log: int
- modlog: int
- off_topic_1: int
- off_topic_2: int
- off_topic_3: int
- python: int
- verification: int
-
-
class Roles(metaclass=YAMLGetter):
section = "guild"
subsection = "roles"
diff --git a/config-default.yml b/config-default.yml
index 84fa86a75..eeeb5fb34 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -51,42 +51,80 @@ guild:
id: 267624335836053506
channels:
- admins: &ADMINS 365960823622991872
- announcements: 354619224620138496
- big_brother_logs: 468507907357409333
- bot: 267659945086812160
- checkpoint_test: 422077681434099723
- devalerts: 460181980097675264
- devlog: 409308876241108992
- devtest: 414574275865870337
- help_0: 303906576991780866
- help_1: 303906556754395136
- help_2: 303906514266226689
- help_3: 439702951246692352
- help_4: 451312046647148554
- help_5: 454941769734422538
- helpers: 385474242440986624
- message_log: &MESSAGE_LOG 467752170159079424
- modlog: &MODLOG 282638479504965634
- off_topic_0: 291284109232308226
- off_topic_1: 463035241142026251
- off_topic_2: 463035268514185226
- python: 267624335836053506
- verification: 352442727016693763
+ admins: &ADMINS 365960823622991872
+ announcements: 354619224620138496
+ big_brother_logs: &BBLOGS 468507907357409333
+ bot: 267659945086812160
+ checkpoint_test: 422077681434099723
+ devalerts: 460181980097675264
+ devlog: &DEVLOG 409308876241108992
+ devtest: &DEVTEST 414574275865870337
+ help_0: 303906576991780866
+ help_1: 303906556754395136
+ help_2: 303906514266226689
+ help_3: 439702951246692352
+ help_4: 451312046647148554
+ help_5: 454941769734422538
+ helpers: 385474242440986624
+ message_log: &MESSAGE_LOG 467752170159079424
+ modlog: &MODLOG 282638479504965634
+ off_topic_0: 291284109232308226
+ off_topic_1: 463035241142026251
+ off_topic_2: 463035268514185226
+ python: 267624335836053506
+ staff_lounge: &STAFF_LOUNGE 464905259261755392
+ verification: 352442727016693763
ignored: [*ADMINS, *MESSAGE_LOG, *MODLOG]
roles:
- admin: 267628507062992896
- announcements: 463658397560995840
- champion: 430492892331769857
- contributor: 295488872404484098
- devops: 409416496733880320
- jammer: 423054537079783434
- moderator: 267629731250176001
- owner: 267627879762755584
- verified: 352427296948486144
- helpers: 267630620367257601
+ admin: &ADMIN_ROLE 267628507062992896
+ announcements: 463658397560995840
+ champion: 430492892331769857
+ contributor: 295488872404484098
+ devops: 409416496733880320
+ jammer: 423054537079783434
+ moderator: &MOD_ROLE 267629731250176001
+ owner: &OWNER_ROLE 267627879762755584
+ verified: 352427296948486144
+ helpers: 267630620367257601
+
+
+filtering:
+
+ # What do we filter?
+ filter_zalgo: true
+ filter_invites: true
+ filter_domains: true
+ watch_expressions: true
+
+ # Filter configuration
+ domain_blacklist:
+ - pornhub.com
+
+ watched_expressions:
+ - .*ni[g]*er.*
+
+ guild_invite_whitelist:
+ - vywQPxd # Code Monkeys
+ - kWJYurV # Functional Programming
+ - 010z0Kw1A9ql5c1Qe # Programming: Meme Edition
+ - XBGetGp # STEM
+
+ # Censor doesn't apply to these
+ channel_whitelist:
+ - *ADMINS
+ - *MODLOG
+ - *MESSAGE_LOG
+ - *DEVLOG
+ - *BBLOGS
+ - *STAFF_LOUNGE
+ - *DEVTEST
+
+ role_whitelist:
+ - *ADMIN_ROLE
+ - *MOD_ROLE
+ - *OWNER_ROLE
keys: