mirror of
https://gitlab.com/chicken-riders/RcGcDb.git
synced 2025-02-24 01:04:09 +00:00
Fixed issue with Discord's merging of messages and debug dump trying to serialize bytes objects in db queries
This commit is contained in:
parent
368ddf81a6
commit
a0b9cb3c1e
|
@ -272,6 +272,9 @@ class StackedDiscordMessage:
|
||||||
def add_message(self, message: DiscordMessage):
|
def add_message(self, message: DiscordMessage):
|
||||||
if self.check_for_length(len(message)):
|
if self.check_for_length(len(message)):
|
||||||
raise MessageTooBig
|
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.length += len(message) + (self.message_type == 0)
|
||||||
self.message_list.append(message)
|
self.message_list.append(message)
|
||||||
# self._setup_embed()
|
# self._setup_embed()
|
||||||
|
|
|
@ -99,7 +99,7 @@ class DomainManager:
|
||||||
"tasks": {},
|
"tasks": {},
|
||||||
"domains": {},
|
"domains": {},
|
||||||
"queued_messages": [],
|
"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()])
|
"total_discord_messages_sent": sum([x.total_discord_messages_sent for x in self.domains.values()])
|
||||||
}
|
}
|
||||||
for task in asyncio.all_tasks():
|
for task in asyncio.all_tasks():
|
||||||
|
|
13
src/misc.py
13
src/misc.py
|
@ -1,5 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import functools
|
||||||
import json
|
import json
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
|
@ -248,3 +249,15 @@ class LimitedList(list):
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "\n".join([str(x) for x in 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
|
||||||
|
|
|
@ -13,6 +13,10 @@ class UpdateDB:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.updated: list[tuple[str, tuple[Union[str, int], ...]]] = []
|
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], ...]]):
|
def add(self, sql_expression: tuple[str, tuple[Union[str, int, bytes], ...]]):
|
||||||
self.updated.append(sql_expression)
|
self.updated.append(sql_expression)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue