diff options
Diffstat (limited to '')
5 files changed, 19 insertions, 18 deletions
| diff --git a/bot/exts/filtering/_filter_context.py b/bot/exts/filtering/_filter_context.py index bcbafe393..22950d5df 100644 --- a/bot/exts/filtering/_filter_context.py +++ b/bot/exts/filtering/_filter_context.py @@ -3,7 +3,6 @@ from __future__ import annotations  from collections.abc import Callable, Coroutine  from dataclasses import dataclass, field, replace  from enum import Enum, auto -from typing import Optional, Union  from discord import DMChannel, Member, Message, TextChannel, Thread, User @@ -22,9 +21,9 @@ class FilterContext:      # Input context      event: Event  # The type of event      author: User | Member | None  # Who triggered the event -    channel: Union[TextChannel, Thread, DMChannel]  # The channel involved -    content: Union[str, set]  # What actually needs filtering -    message: Optional[Message]  # The message involved +    channel: TextChannel | Thread | DMChannel  # The channel involved +    content: str | set  # What actually needs filtering +    message: Message | None  # The message involved      embeds: list = field(default_factory=list)  # Any embeds involved      # Output context      dm_content: str = field(default_factory=str)  # The content to DM the invoker diff --git a/bot/exts/filtering/_filters/unique/discord_token.py b/bot/exts/filtering/_filters/unique/discord_token.py index 571a8a9b1..7fdb800df 100644 --- a/bot/exts/filtering/_filters/unique/discord_token.py +++ b/bot/exts/filtering/_filters/unique/discord_token.py @@ -10,6 +10,7 @@ from pydantic import BaseModel, Field  import bot  from bot import constants, utils +from bot.constants import Guild  from bot.exts.filtering._filter_context import Event, FilterContext  from bot.exts.filtering._filters.filter import UniqueFilter  from bot.exts.filtering._utils import resolve_mention @@ -74,7 +75,7 @@ class DiscordTokenFilter(UniqueFilter):          if not found_token:              return False -        if mod_log := self.mod_log: +        if ctx.message and (mod_log := self.mod_log):              mod_log.ignore(constants.Event.message_delete, ctx.message.id)          ctx.content = ctx.content.replace(found_token.hmac, self.censor_hmac(found_token.hmac))          ctx.additional_actions.append(self._create_token_alert_embed_wrapper(found_token)) @@ -84,8 +85,8 @@ class DiscordTokenFilter(UniqueFilter):          """Create the action to perform when an alert should be sent for a message containing a Discord token."""          async def _create_token_alert_embed(ctx: FilterContext) -> None:              """Add an alert embed to the context with info about the token sent.""" -            userid_message, is_user = await self.format_userid_log_message(ctx.message, found_token) -            log_message = self.format_log_message(ctx.message, found_token) +            userid_message, is_user = await self.format_userid_log_message(found_token) +            log_message = self.format_log_message(ctx.author, ctx.channel, found_token)              log.debug(log_message)              if is_user: @@ -102,7 +103,7 @@ class DiscordTokenFilter(UniqueFilter):          return _create_token_alert_embed      @classmethod -    async def format_userid_log_message(cls, msg: discord.Message, token: Token) -> tuple[str, bool]: +    async def format_userid_log_message(cls, token: Token) -> tuple[str, bool]:          """          Format the portion of the log message that includes details about the detected user ID. @@ -112,7 +113,8 @@ class DiscordTokenFilter(UniqueFilter):          Returns a tuple of (log_message, is_user)          """          user_id = cls.extract_user_id(token.user_id) -        user = await get_or_fetch_member(msg.guild, user_id) +        guild = bot.instance.get_guild(Guild.id) +        user = await get_or_fetch_member(guild, user_id)          if user:              return KNOWN_USER_LOG_MESSAGE.format( @@ -129,11 +131,11 @@ class DiscordTokenFilter(UniqueFilter):          return 'x' * (len(hmac) - 3) + hmac[-3:]      @classmethod -    def format_log_message(cls, msg: discord.Message, token: Token) -> str: +    def format_log_message(cls, author: discord.User, channel: discord.abc.GuildChannel, token: Token) -> str:          """Return the generic portion of the log message to send for `token` being censored in `msg`."""          return LOG_MESSAGE.format( -            author=format_user(msg.author), -            channel=msg.channel.mention, +            author=format_user(author), +            channel=channel.mention,              user_id=token.user_id,              timestamp=token.timestamp,              hmac=cls.censor_hmac(token.hmac), diff --git a/bot/exts/filtering/_filters/unique/rich_embed.py b/bot/exts/filtering/_filters/unique/rich_embed.py index 75f578d3e..a0d9e263f 100644 --- a/bot/exts/filtering/_filters/unique/rich_embed.py +++ b/bot/exts/filtering/_filters/unique/rich_embed.py @@ -19,8 +19,8 @@ class RichEmbedFilter(UniqueFilter):      def triggered_on(self, ctx: FilterContext) -> bool:          """Determine if `msg` contains any rich embeds not auto-generated from a URL.""" -        if ctx.message.embeds: -            for embed in ctx.message.embeds: +        if ctx.embeds: +            for embed in ctx.embeds:                  if embed.type == "rich":                      urls = URL_RE.findall(ctx.content)                      final_urls = set(urls) @@ -32,7 +32,7 @@ class RichEmbedFilter(UniqueFilter):                      if not embed.url or embed.url not in final_urls:                          # If `embed.url` does not exist or if `embed.url` is not part of the content                          # of the message, it's unlikely to be an auto-generated embed by Discord. -                        ctx.alert_embeds.extend(ctx.message.embeds) +                        ctx.alert_embeds.extend(ctx.embeds)                          return True                      else:                          log.trace( diff --git a/bot/exts/filtering/_filters/unique/webhook.py b/bot/exts/filtering/_filters/unique/webhook.py index ee6b7135e..b9d98db35 100644 --- a/bot/exts/filtering/_filters/unique/webhook.py +++ b/bot/exts/filtering/_filters/unique/webhook.py @@ -36,7 +36,7 @@ class WebhookFilter(UniqueFilter):              return False          # Don't log this. -        if mod_log := self.mod_log: +        if ctx.message and (mod_log := self.mod_log):              mod_log.ignore(constants.Event.message_delete, ctx.message.id)          for i, match in enumerate(matches, start=1): diff --git a/bot/exts/filtering/_settings_types/actions/delete_messages.py b/bot/exts/filtering/_settings_types/actions/delete_messages.py index 1770c29ec..2f851ef04 100644 --- a/bot/exts/filtering/_settings_types/actions/delete_messages.py +++ b/bot/exts/filtering/_settings_types/actions/delete_messages.py @@ -2,7 +2,7 @@ from typing import ClassVar  from discord.errors import NotFound -from bot.exts.filtering._filter_context import Event, FilterContext +from bot.exts.filtering._filter_context import FilterContext  from bot.exts.filtering._settings_types.settings_entry import ActionEntry @@ -18,7 +18,7 @@ class DeleteMessages(ActionEntry):      async def action(self, ctx: FilterContext) -> None:          """Delete the context message(s).""" -        if not self.delete_messages or ctx.event not in (Event.MESSAGE, Event.MESSAGE_EDIT): +        if not self.delete_messages or not ctx.message:              return          if not ctx.message.guild: | 
