aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Steele Farnsworth <[email protected]>2025-01-29 20:49:18 -0500
committerGravatar Steele Farnsworth <[email protected]>2025-01-29 20:49:18 -0500
commitc19aeaab3704c60c6dda9b7ed3d207cfc3ff50aa (patch)
tree0f352052673f49e5ce8342d31fd6ebff3fd3ab5d
parentAdd logging; expand initial message from bot; fix bug in deleting the paste. (diff)
Account for messages with attachments being deleted before author reacts.
Messages might be deleted immediately if the message or the attachment trips a filter, in which case we don't want the user to be able to upload them.
-rw-r--r--bot/exts/utils/attachment_pastebin_uploader.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/bot/exts/utils/attachment_pastebin_uploader.py b/bot/exts/utils/attachment_pastebin_uploader.py
index 156814686..6c54a4a2b 100644
--- a/bot/exts/utils/attachment_pastebin_uploader.py
+++ b/bot/exts/utils/attachment_pastebin_uploader.py
@@ -33,6 +33,7 @@ class EmbedFileHandler(commands.Cog):
def __init__(self, bot: Bot):
self.bot = bot
+ self.pending_messages = set[int]()
@staticmethod
async def _convert_attachment(attachment: discord.Attachment) -> paste_service.PasteFile:
@@ -42,6 +43,11 @@ class EmbedFileHandler(commands.Cog):
return paste_service.PasteFile(content=file_content, name=attachment.filename)
@commands.Cog.listener()
+ async def on_message_delete(self, message: discord.Message) -> None:
+ """Allows us to know which messages with attachments have been deleted."""
+ self.pending_messages.discard(message.id)
+
+ @commands.Cog.listener()
async def on_message(self, message: discord.Message) -> None:
"""Listens for messages containing attachments and offers to upload them to the pastebin."""
# Check if the message contains an embedded file and is not sent by a bot.
@@ -49,6 +55,7 @@ class EmbedFileHandler(commands.Cog):
return
log.trace(f"Offering to upload attachments for {message.author} in {message.channel}, message {message.id}")
+ self.pending_messages.add(message.id)
# Offer to upload the attachments and wait for the user's reaction.
bot_reply = await message.reply(
@@ -72,8 +79,15 @@ class EmbedFileHandler(commands.Cog):
log.trace(f"{message.author} didn't give permission to upload {message.id} content; aborting.")
await bot_reply.edit(content=f"~~{bot_reply.content}~~")
await bot_reply.clear_reactions()
+
+ if message.id not in self.pending_messages:
+ log.trace(f"{message.author}'s message was deleted before the attachments could be uploaded; aborting.")
+ await bot_reply.delete()
return
+ # In either case, we do not want the message ID in pending_messages anymore.
+ self.pending_messages.discard(message.id)
+
# Extract the attachments.
files = [
await self._convert_attachment(f)