@@ -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]
|
||||
|
||||
@@ -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)] = []
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ emojis.load_emojis()
|
||||
|
||||
bot = Bot(
|
||||
"Discord Analyst",
|
||||
"1.15.1",
|
||||
"1.15.2",
|
||||
alias="%",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user