diff --git a/src/logs/channel_logs.py b/src/logs/channel_logs.py index 07bb14e..686aea5 100644 --- a/src/logs/channel_logs.py +++ b/src/logs/channel_logs.py @@ -1,3 +1,4 @@ +import logging from typing import Union, Tuple, Any import discord from datetime import datetime @@ -50,6 +51,7 @@ class ChannelLogs: def preload(self, channel: discord.TextChannel): self.name = channel.name self.channel = channel + self.clean() @property def nsfw(self): @@ -97,7 +99,8 @@ class ChannelLogs: first_message_date = message.created_at m = MessageLog(message, self) await m.load(message) - self.messages += [m] + if m not in self.messages: + self.messages += [m] yield len(self.messages), False if done < CHUNK_SIZE: # reached bottom self.first_message_id = None @@ -120,7 +123,8 @@ class ChannelLogs: self.last_message_id = message.id m = MessageLog(message, self) await m.load(message) - self.messages.insert(0, m) + if m not in self.messages: + self.messages.insert(0, m) yield len(self.messages), False except discord.errors.HTTPException as e: yield -1, True @@ -128,8 +132,21 @@ class ChannelLogs: self.start_date = ( self.messages[-1].created_at if len(self.messages) > 0 else None ) + self.clean() yield len(self.messages), True + def clean(self): + ids = [] + count = 0 + for message in self.messages: + if message.id in ids: + self.messages.remove(message) + count += 1 + else: + ids += [message.id] + if count > 0: + logging.info(f"log {self.guild.id}.{self.id} > cleaned {count} messages") + def dict(self) -> dict: channel = serialize(self, not_serialized=["channel", "guild", "start_date"]) channel["messages"] = [message.dict() for message in self.messages] diff --git a/src/logs/message_log.py b/src/logs/message_log.py index da499f7..cebc588 100644 --- a/src/logs/message_log.py +++ b/src/logs/message_log.py @@ -63,6 +63,9 @@ class MessageLog: self.attachment = message["attachment"] self.reactions = message["reactions"] + def __eq__(self, other: object) -> bool: + return isinstance(other, self.__class__) and other.id == self.id + async def load(self, message: discord.Message): for reaction in message.reactions: self.reactions[str(reaction.emoji)] = [] diff --git a/src/main.py b/src/main.py index 38eef86..179fe71 100644 --- a/src/main.py +++ b/src/main.py @@ -18,7 +18,7 @@ emojis.load_emojis() bot = Bot( "Discord Analyst", - "1.15.1", + "1.15.2", alias="%", )