+11
-23
@@ -38,11 +38,11 @@ class ChannelLogs:
|
|||||||
and channel["first_message_id"] is not None
|
and channel["first_message_id"] is not None
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
self.messages = [
|
self.messages = {
|
||||||
MessageLog(message, self) for message in channel["messages"]
|
MessageLog(message, self) for message in channel["messages"]
|
||||||
]
|
}
|
||||||
self.start_date = (
|
self.start_date = (
|
||||||
self.messages[-1].created_at if len(self.messages) > 0 else None
|
self.sorted_messages[0].created_at if len(self.messages) > 0 else None
|
||||||
)
|
)
|
||||||
|
|
||||||
def is_format(self):
|
def is_format(self):
|
||||||
@@ -51,7 +51,10 @@ class ChannelLogs:
|
|||||||
def preload(self, channel: discord.TextChannel):
|
def preload(self, channel: discord.TextChannel):
|
||||||
self.name = channel.name
|
self.name = channel.name
|
||||||
self.channel = channel
|
self.channel = channel
|
||||||
self.clean()
|
|
||||||
|
@property
|
||||||
|
def sorted_messages(self):
|
||||||
|
return sorted(self.messages)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nsfw(self):
|
def nsfw(self):
|
||||||
@@ -99,14 +102,13 @@ class ChannelLogs:
|
|||||||
first_message_date = message.created_at
|
first_message_date = message.created_at
|
||||||
m = MessageLog(message, self)
|
m = MessageLog(message, self)
|
||||||
await m.load(message)
|
await m.load(message)
|
||||||
if m not in self.messages:
|
self.messages.add(m)
|
||||||
self.messages += [m]
|
|
||||||
yield len(self.messages), False
|
yield len(self.messages), False
|
||||||
if done < CHUNK_SIZE: # reached bottom
|
if done < CHUNK_SIZE: # reached bottom
|
||||||
self.first_message_id = None
|
self.first_message_id = None
|
||||||
self.last_message_id = channel.last_message_id
|
self.last_message_id = channel.last_message_id
|
||||||
# load forward
|
# load forward
|
||||||
last_message_date = self.messages[0].created_at
|
last_message_date = self.sorted_messages[-1].created_at
|
||||||
if not is_empty and (stop_date is None or last_message_date < stop_date):
|
if not is_empty and (stop_date is None or last_message_date < stop_date):
|
||||||
tmp_message_id = None
|
tmp_message_id = None
|
||||||
while (
|
while (
|
||||||
@@ -123,30 +125,16 @@ class ChannelLogs:
|
|||||||
self.last_message_id = message.id
|
self.last_message_id = message.id
|
||||||
m = MessageLog(message, self)
|
m = MessageLog(message, self)
|
||||||
await m.load(message)
|
await m.load(message)
|
||||||
if m not in self.messages:
|
self.messages.add(m)
|
||||||
self.messages.insert(0, m)
|
|
||||||
yield len(self.messages), False
|
yield len(self.messages), False
|
||||||
except discord.errors.HTTPException as e:
|
except discord.errors.HTTPException as e:
|
||||||
yield -1, True
|
yield -1, True
|
||||||
return # When an exception occurs (like Forbidden)
|
return # When an exception occurs (like Forbidden)
|
||||||
self.start_date = (
|
self.start_date = (
|
||||||
self.messages[-1].created_at if len(self.messages) > 0 else None
|
self.sorted_messages[0].created_at if len(self.messages) > 0 else None
|
||||||
)
|
)
|
||||||
self.clean()
|
|
||||||
yield len(self.messages), True
|
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:
|
def dict(self) -> dict:
|
||||||
channel = serialize(self, not_serialized=["channel", "guild", "start_date"])
|
channel = serialize(self, not_serialized=["channel", "guild", "start_date"])
|
||||||
channel["messages"] = [message.dict() for message in self.messages]
|
channel["messages"] = [message.dict() for message in self.messages]
|
||||||
|
|||||||
@@ -66,6 +66,12 @@ class MessageLog:
|
|||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
return isinstance(other, self.__class__) and other.id == self.id
|
return isinstance(other, self.__class__) and other.id == self.id
|
||||||
|
|
||||||
|
def __gt__(self, other: 'MessageLog') -> bool:
|
||||||
|
return self.created_at > other.created_at
|
||||||
|
|
||||||
|
def __hash__(self) -> int:
|
||||||
|
return self.id
|
||||||
|
|
||||||
async def load(self, message: discord.Message):
|
async def load(self, message: discord.Message):
|
||||||
for reaction in message.reactions:
|
for reaction in message.reactions:
|
||||||
self.reactions[str(reaction.emoji)] = []
|
self.reactions[str(reaction.emoji)] = []
|
||||||
|
|||||||
Reference in New Issue
Block a user