Skip to content

Commit 68da7da

Browse files
authored
feat: custom message_filter_passed dispatch (#416)
2 parents 33f2e7e + 3ec2639 commit 68da7da

File tree

13 files changed

+64
-78
lines changed

13 files changed

+64
-78
lines changed

app/bot.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -171,23 +171,15 @@ def is_ghostty_mod(self, user: Account) -> bool:
171171
member = self.ghostty_guild.get_member(user.id)
172172
return member is not None and is_mod(member)
173173

174-
def fails_message_filters(self, message: dc.Message) -> bool:
174+
def _fails_message_filters(self, message: dc.Message) -> bool:
175175
# This can't be the MessageFilter cog type because that would cause an import
176176
# cycle.
177177
message_filter: Any = self.get_cog("MessageFilter")
178178
return message_filter and message_filter.check(message)
179179

180-
def on_message_preconditions_fail(self, message: dc.Message) -> bool:
181-
return (
182-
message.author.bot
183-
or message.type not in REGULAR_MESSAGE_TYPES
184-
or self.fails_message_filters(message)
185-
)
186-
187180
@override
188181
async def on_message(self, message: dc.Message, /) -> None:
189-
# Ignore our own messages
190-
if message.author == self.user:
182+
if message.author.bot or message.type not in REGULAR_MESSAGE_TYPES:
191183
return
192184

193185
# Simple test
@@ -196,11 +188,8 @@ async def on_message(self, message: dc.Message, /) -> None:
196188
await try_dm(message.author, "pong")
197189
return
198190

199-
# Don't continue if the message would be deleted by a message filter.
200-
if self.fails_message_filters(message):
201-
return
202-
203-
await self.process_commands(message)
191+
if not self._fails_message_filters(message):
192+
self.dispatch("message_filter_passed", message)
204193

205194
@classmethod
206195
def get_component_extension_names(cls) -> frozenset[str]:

app/common/linker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ async def edit( # noqa: PLR0913
121121
view_type: Callable[[dc.Message, int], dc.ui.View],
122122
view_timeout: float = 30.0,
123123
) -> None:
124+
if before.author.bot:
125+
logger.trace("ignoring bot message edit")
126+
return
124127
if before.content == after.content:
125128
logger.trace("content did not change")
126129
return

app/components/developer.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,13 @@ async def existing_extension_autocomplete(
3232
),
3333
)
3434

35-
@commands.Cog.listener()
36-
async def on_message(self, message: dc.Message) -> None:
35+
@commands.Cog.listener("on_message_filter_passed")
36+
async def sync_handler(self, message: dc.Message) -> None:
3737
# Handle !sync command. This can't be a slash command because this command is
38-
# the one that actually adds the slash commands in the first place.
39-
if (
40-
self.bot.on_message_preconditions_fail(message)
41-
or message.content.strip() != "!sync"
42-
):
38+
# the one that actually adds the slash commands in the first place. This does
39+
# not use discord.py's command framework because the bot only supports slash
40+
# commands.
41+
if message.content.strip() != "!sync":
4342
return
4443

4544
if not self.bot.is_ghostty_mod(message.author):

app/components/fixup_embeds.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,7 @@ async def process(self, message: dc.Message) -> ProcessedMessage:
8888
)
8989

9090
@commands.Cog.listener()
91-
async def on_message(self, message: dc.Message) -> None:
92-
if self.bot.on_message_preconditions_fail(message):
93-
return
91+
async def on_message_filter_passed(self, message: dc.Message) -> None:
9492
output = await self.process(message)
9593
if not output.item_count:
9694
return
@@ -117,7 +115,7 @@ async def on_message_edit(self, before: dc.Message, after: dc.Message) -> None:
117115
before,
118116
after,
119117
message_processor=self.process,
120-
interactor=self.on_message,
118+
interactor=self.on_message_filter_passed,
121119
view_type=FixUpActions,
122120
)
123121

app/components/github_integration/code_links.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,8 @@ async def process(self, message: dc.Message) -> ProcessedMessage:
174174
blobs.append("-# Some snippets were omitted")
175175
return ProcessedMessage(content="\n".join(blobs), item_count=len(snippets))
176176

177-
@commands.Cog.listener("on_message")
177+
@commands.Cog.listener("on_message_filter_passed")
178178
async def reply_with_code(self, message: dc.Message) -> None:
179-
if self.bot.on_message_preconditions_fail(message):
180-
return
181179
output = await self.process(message)
182180
if output.item_count != 0:
183181
await message.edit(suppress=True)

app/components/github_integration/comments/integration.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,8 @@ def comment_to_embed(self, comment: Comment) -> dc.Embed:
7676
)
7777
return embed
7878

79-
@commands.Cog.listener("on_message")
79+
@commands.Cog.listener("on_message_filter_passed")
8080
async def reply_with_comments(self, message: dc.Message) -> None:
81-
if self.bot.on_message_preconditions_fail(message):
82-
return
8381
embeds = [
8482
self.comment_to_embed(comment)
8583
async for comment in get_comments(message.content)

app/components/github_integration/commit_links.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,8 @@ async def process(self, message: dc.Message) -> ProcessedMessage:
125125
content = "\n\n".join(map(self._format, valid_shas))
126126
return ProcessedMessage(item_count=len(valid_shas), content=content)
127127

128-
@commands.Cog.listener("on_message")
128+
@commands.Cog.listener("on_message_filter_passed")
129129
async def reply_with_commit_details(self, message: dc.Message) -> None:
130-
if self.bot.on_message_preconditions_fail(message):
131-
return
132130
output = await self.process(message)
133131
if not output.item_count:
134132
return

app/components/github_integration/entities/integration.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,9 @@ async def update_recent_mentions(self) -> None:
7878
async def before_update_recent_mentions(self) -> None:
7979
await self.bot.wait_until_ready()
8080

81-
@commands.Cog.listener("on_message")
81+
@commands.Cog.listener("on_message_filter_passed")
8282
async def reply_with_entities(self, message: dc.Message) -> None:
83-
if self.bot.on_message_preconditions_fail(message) or not ENTITY_REGEX.search(
84-
message.content
85-
):
83+
if not ENTITY_REGEX.search(message.content):
8684
return
8785

8886
if is_dm(message.author):

app/components/xkcd_mentions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,8 @@ async def process(self, message: dc.Message) -> ProcessedMessage:
139139
embeds = [*embeds[:9], omitted]
140140
return ProcessedMessage(embeds=embeds, item_count=len(embeds))
141141

142-
@commands.Cog.listener("on_message")
142+
@commands.Cog.listener("on_message_filter_passed")
143143
async def handle_mentions(self, message: dc.Message) -> None:
144-
if self.bot.on_message_preconditions_fail(message):
145-
return
146144
output = await self.process(message)
147145
if output.item_count < 1:
148146
return

app/components/zig_codeblocks.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,8 @@ async def process(self, message: dc.Message) -> ProcessedMessage:
205205
item_count=len(highlighted_codeblocks) + len(attachments),
206206
)
207207

208-
@commands.Cog.listener("on_message")
208+
@commands.Cog.listener("on_message_filter_passed")
209209
async def check_for_zig_code(self, message: dc.Message) -> None:
210-
if self.bot.on_message_preconditions_fail(message):
211-
return
212210
output = await self.process(message)
213211
if not output.item_count:
214212
return

0 commit comments

Comments
 (0)