aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/exts/filtering/_filter_context.py7
-rw-r--r--bot/exts/filtering/_filters/unique/discord_token.py18
-rw-r--r--bot/exts/filtering/_filters/unique/rich_embed.py6
-rw-r--r--bot/exts/filtering/_filters/unique/webhook.py2
-rw-r--r--bot/exts/filtering/_settings_types/actions/delete_messages.py4
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: