diff --git a/discordbot/titanembeds/bot.py b/discordbot/titanembeds/bot.py index cfca3f4..6d03394 100644 --- a/discordbot/titanembeds/bot.py +++ b/discordbot/titanembeds/bot.py @@ -2,6 +2,7 @@ from config import config from titanembeds.database import DatabaseInterface from titanembeds.commands import Commands from titanembeds.socketio import SocketIOInterface +from collections import deque import discord import aiohttp import asyncio @@ -21,6 +22,8 @@ class Titan(discord.Client): self.database = DatabaseInterface(self) self.command = Commands(self, self.database) self.socketio = SocketIOInterface(self, config["redis-uri"]) + + self.delete_list = [] # List of msg ids to prevent duplicate delete def _cleanup(self): try: @@ -107,6 +110,7 @@ class Titan(discord.Client): await self.socketio.on_message_update(message_after) async def on_message_delete(self, message): + self.delete_list.append(message.id) await self.database.delete_message(message) await self.socketio.on_message_delete(message) @@ -199,7 +203,6 @@ class Titan(discord.Client): if msg["op"] != 0: return action = msg["t"] - await asyncio.sleep(1) if action == "MESSAGE_UPDATE": if not self.in_messages_cache(msg["d"]["id"]): channel = self.get_channel(msg["d"]["channel_id"]) @@ -207,13 +210,18 @@ class Titan(discord.Client): await self.on_message_edit(None, message) if action == "MESSAGE_DELETE": if not self.in_messages_cache(msg["d"]["id"]): + await asyncio.sleep(1) await self.process_raw_message_delete(msg["d"]["id"], msg["d"]["channel_id"]) if action == "MESSAGE_DELETE_BULK": + await asyncio.sleep(1) for msgid in msg["d"]["ids"]: if not self.in_messages_cache(msgid): await self.process_raw_message_delete(msgid, msg["d"]["channel_id"]) async def process_raw_message_delete(self, msg_id, channel_id): + if msg_id in self.delete_list: + self.delete_list.remove(msg_id) + return channel = self.get_channel(channel_id) msg = discord.Message(channel=channel, reactions=[], id=msg_id, type=0, timestamp="2017-01-15T02:59:58", content="What fun is there in making sense?") # Procreate a fake message object await self.on_message_delete(msg)