Fixed issue with Discord's merging of messages and debug dump trying to serialize bytes objects in db queries

This commit is contained in:
Frisk 2024-09-06 18:49:59 +02:00
parent 368ddf81a6
commit a0b9cb3c1e
4 changed files with 21 additions and 1 deletions

View file

@ -272,6 +272,9 @@ class StackedDiscordMessage:
def add_message(self, message: DiscordMessage):
if self.check_for_length(len(message)):
raise MessageTooBig
# Discord merges multiple embeds with same URL into one, this is why we must to add dummy argument for this not to happen
if self.message_type == 1 and any(message.embed["url"] == stackedmessage.embed["url"] for stackedmessage in self.message_list):
message.embed["url"] += ("&" if "?" in message.embed["url"] else "?") + "_id=" + str(len(self.message_list))
self.length += len(message) + (self.message_type == 0)
self.message_list.append(message)
# self._setup_embed()

View file

@ -99,7 +99,7 @@ class DomainManager:
"tasks": {},
"domains": {},
"queued_messages": [],
"awaiting_DB_queries": dbmanager.updated,
"awaiting_DB_queries": dbmanager.json(),
"total_discord_messages_sent": sum([x.total_discord_messages_sent for x in self.domains.values()])
}
for task in asyncio.all_tasks():

View file

@ -1,5 +1,6 @@
from __future__ import annotations
import functools
import json
from functools import cache
from html.parser import HTMLParser
@ -248,3 +249,15 @@ class LimitedList(list):
def __repr__(self):
return "\n".join([str(x) for x in self])
def catch_exceptions(passed_context):
def wrapper(func):
@functools.wraps(func)
async def wrapped(*args, **kwargs):
try:
return await func(*args, **kwargs)
except Exception as e:
return wrapped
return wrapper

View file

@ -13,6 +13,10 @@ class UpdateDB:
def __init__(self):
self.updated: list[tuple[str, tuple[Union[str, int], ...]]] = []
def json(self):
# since pickled Discord messages are bytes object which is not serializable, we strip it here
return [(item[0], [arg for arg in item[1] if not isinstance(arg, bytes)]) for item in self.updated]
def add(self, sql_expression: tuple[str, tuple[Union[str, int, bytes], ...]]):
self.updated.append(sql_expression)