small improvments

This commit is contained in:
Klemek
2021-05-18 16:54:18 +02:00
parent 38056f430f
commit a01414dce7
3 changed files with 29 additions and 25 deletions
+5 -12
View File
@@ -3,12 +3,11 @@ import discord
from datetime import datetime from datetime import datetime
from . import MessageLog from . import MessageLog
from utils import serialize, FakeMessage
CHUNK_SIZE = 2000 CHUNK_SIZE = 2000
FORMAT = 3 FORMAT = 3
NOT_SERIALIZED = ["channel", "guild", "start_date"]
class ChannelLogs: class ChannelLogs:
def __init__(self, channel: Union[discord.TextChannel, dict], guild: Any): def __init__(self, channel: Union[discord.TextChannel, dict], guild: Any):
@@ -82,9 +81,7 @@ class ChannelLogs:
done = 0 done = 0
async for message in channel.history( async for message in channel.history(
limit=CHUNK_SIZE, limit=CHUNK_SIZE,
before=discord.MessageReference( before=FakeMessage(self.first_message_id)
self.first_message_id, self.id, guild_id=self.guild.id
)
if self.first_message_id is not None if self.first_message_id is not None
else None, else None,
oldest_first=False, oldest_first=False,
@@ -110,9 +107,7 @@ class ChannelLogs:
tmp_message_id = self.last_message_id tmp_message_id = self.last_message_id
async for message in channel.history( async for message in channel.history(
limit=CHUNK_SIZE, limit=CHUNK_SIZE,
after=discord.MessageReference( after=FakeMessage(self.first_message_id),
self.first_message_id, self.id, guild_id=self.guild.id
),
oldest_first=True, oldest_first=True,
): ):
last_message_date = message.created_at last_message_date = message.created_at
@@ -121,7 +116,7 @@ class ChannelLogs:
await m.load(message) await m.load(message)
self.messages.insert(0, m) self.messages.insert(0, m)
yield len(self.messages), False yield len(self.messages), False
except discord.errors.HTTPException: 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 = (
@@ -130,8 +125,6 @@ class ChannelLogs:
yield len(self.messages), True yield len(self.messages), True
def dict(self) -> dict: def dict(self) -> dict:
channel = dict(self.__dict__) channel = serialize(self, not_serialized=["channel", "guild", "start_date"])
for key in NOT_SERIALIZED:
channel.pop(key, None)
channel["messages"] = [message.dict() for message in self.messages] channel["messages"] = [message.dict() for message in self.messages]
return channel return channel
+4 -12
View File
@@ -2,13 +2,10 @@ from typing import Union, Any
import discord import discord
from datetime import datetime from datetime import datetime
from utils import is_extension from utils import is_extension, serialize
IMAGE_FORMAT = [".gif", ".gifv", ".png", ".jpg", ".jpeg", ".bmp"] IMAGE_FORMAT = [".gif", ".gifv", ".png", ".jpg", ".jpeg", ".bmp"]
EMBED_IMAGES = ["image", "gifv"] EMBED_IMAGES = ["image", "gifv", "gif"]
NOT_SERIALIZED = ["channel"]
class MessageLog: class MessageLog:
@@ -81,11 +78,6 @@ class MessageLog:
self.reactions[str(reaction.emoji)] += [user.id] self.reactions[str(reaction.emoji)] += [user.id]
def dict(self) -> dict: def dict(self) -> dict:
message = dict(self.__dict__) return serialize(
for key in NOT_SERIALIZED: self, not_serialized=["channel"], dates=["created_at", "edited_at"]
message.pop(key, None)
message["created_at"] = self.created_at.isoformat()
message["edited_at"] = (
self.edited_at.isoformat() if self.edited_at is not None else None
) )
return message
+20 -1
View File
@@ -30,7 +30,7 @@ def generate_help(
replace_args=[], replace_args=[],
): ):
arg_list = "* " + "\n* ".join( arg_list = "* " + "\n* ".join(
replace_args + COMMON_HELP_ARGS[len(replace_args) :] + args args + replace_args + COMMON_HELP_ARGS[len(replace_args) :]
) )
return f"""``` return f"""```
%{cmd}: {info} %{cmd}: {info}
@@ -84,6 +84,10 @@ def escape_text(text: str) -> str:
return discord.utils.escape_markdown(discord.utils.escape_mentions(text)) return discord.utils.escape_markdown(discord.utils.escape_mentions(text))
class FakeMessage:
def __init__(self, id: int):
self.id = id
# FILE # FILE
@@ -132,6 +136,21 @@ def val_sum(d: Dict[Any, int]) -> int:
return sum(d.values()) return sum(d.values())
def serialize(
obj: Any, *, not_serialized: List[str] = [], dates: List[str] = []
) -> Dict:
output = dict(obj.__dict__)
for key in not_serialized:
output.pop(key, None)
for key in dates:
if output[key]:
try:
output[key] = getattr(obj, key).isoformat()
except AttributeError:
pass
return output
# MESSAGE FORMATTING # MESSAGE FORMATTING