diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/cogs/moderation/modlog.py | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/bot/cogs/moderation/modlog.py b/bot/cogs/moderation/modlog.py index 9d28030d9..b3ae8e215 100644 --- a/bot/cogs/moderation/modlog.py +++ b/bot/cogs/moderation/modlog.py @@ -3,6 +3,7 @@ import difflib  import itertools  import logging  import typing as t +from contextlib import contextmanager  from datetime import datetime  from itertools import zip_longest @@ -40,6 +41,7 @@ class ModLog(Cog, name="ModLog"):      def __init__(self, bot: Bot):          self.bot = bot          self._ignored = {event: [] for event in Event} +        self._ignore_all = False          self._cached_deletes = []          self._cached_edits = [] @@ -81,6 +83,15 @@ class ModLog(Cog, name="ModLog"):              if item not in self._ignored[event]:                  self._ignored[event].append(item) +    @contextmanager +    def ignore_all(self) -> None: +        """Ignore all events while inside this context scope.""" +        self._ignore_all = True +        try: +            yield +        finally: +            self._ignore_all = False +      async def send_log_message(          self,          icon_url: t.Optional[str], @@ -191,6 +202,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.guild_channel_update].remove(before.id)              return +        if self._ignore_all: +            return +          # Two channel updates are sent for a single edit: 1 for topic and 1 for category change.          # TODO: remove once support is added for ignoring multiple occurrences for the same channel.          help_categories = (Categories.help_available, Categories.help_dormant, Categories.help_in_use) @@ -386,6 +400,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_ban].remove(member.id)              return +        if self._ignore_all: +            return +          await self.send_log_message(              Icons.user_ban, Colours.soft_red,              "User banned", f"{member} (`{member.id}`)", @@ -426,6 +443,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_remove].remove(member.id)              return +        if self._ignore_all: +            return +          member_str = escape_markdown(str(member))          await self.send_log_message(              Icons.sign_out, Colours.soft_red, @@ -444,6 +464,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_unban].remove(member.id)              return +        if self._ignore_all: +            return +          member_str = escape_markdown(str(member))          await self.send_log_message(              Icons.user_unban, Colour.blurple(), @@ -462,6 +485,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.member_update].remove(before.id)              return +        if self._ignore_all: +            return +          diff = DeepDiff(before, after)          changes = []          done = [] @@ -564,6 +590,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.message_delete].remove(message.id)              return +        if self._ignore_all: +            return +          if author.bot:              return @@ -623,6 +652,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.message_delete].remove(event.message_id)              return +        if self._ignore_all: +            return +          channel = self.bot.get_channel(event.channel_id)          if channel.category: @@ -797,6 +829,9 @@ class ModLog(Cog, name="ModLog"):              self._ignored[Event.voice_state_update].remove(member.id)              return +        if self._ignore_all: +            return +          # Exclude all channel attributes except the name.          diff = DeepDiff(              before, | 
