Few fixes

This commit is contained in:
Frisk 2024-08-10 14:59:37 +02:00
parent bbb81469eb
commit f9af29a5c7
3 changed files with 25 additions and 20 deletions

View file

@ -48,9 +48,11 @@ class DiscordMessageMetadata:
return f"<DiscordMessageMetadata page_id={self.page_id} log_id={self.log_id} rev_id={self.rev_id}>" return f"<DiscordMessageMetadata page_id={self.page_id} log_id={self.log_id} rev_id={self.rev_id}>"
def __getstate__(self): def __getstate__(self):
obj_copy = self.__dict__.copy() if "domain" in self.__dict__:
del obj_copy["domain"] obj_copy = self.__dict__.copy()
return obj_copy del obj_copy['domain']
return obj_copy
return super().__getstate__()
def json(self) -> dict: def json(self) -> dict:
dict_obj = { dict_obj = {
@ -107,7 +109,7 @@ class DiscordMessage:
raise TypeError("Tried to assign a value when message type is plain message!") raise TypeError("Tried to assign a value when message type is plain message!")
def __getitem__(self, item): def __getitem__(self, item):
return self.embed[item] return self.embed.__getitem__(item)
def __repr__(self): def __repr__(self):
"""Return the Discord webhook object ready to be sent""" """Return the Discord webhook object ready to be sent"""
@ -117,9 +119,11 @@ class DiscordMessage:
return self.length return self.length
def __getstate__(self): def __getstate__(self):
obj_copy = self.__dict__.copy() if "wiki" in self.__dict__:
del obj_copy['wiki'] obj_copy = self.__dict__.copy()
return obj_copy del obj_copy['wiki']
return obj_copy
return super().__getstate__()
def json(self): def json(self):
dict_obj = { dict_obj = {
@ -232,9 +236,11 @@ class StackedDiscordMessage:
return self.message_list.__iter__() return self.message_list.__iter__()
def __getstate__(self): def __getstate__(self):
obj_copy = self.__dict__.copy() if "wiki" in self.__dict__:
del obj_copy['wiki'] obj_copy = self.__dict__.copy()
return obj_copy del obj_copy['wiki']
return obj_copy
return super().__getstate__()
def is_empty(self): def is_empty(self):
return len(self.message_list) == 0 return len(self.message_list) == 0

View file

@ -265,7 +265,7 @@ async def send_to_discord_webhook(message: [StackedDiscordMessage, DiscordMessag
header['Content-Type'] = 'application/json' header['Content-Type'] = 'application/json'
header['X-RateLimit-Precision'] = "millisecond" header['X-RateLimit-Precision'] = "millisecond"
async with aiohttp.ClientSession(headers=header, timeout=aiohttp.ClientTimeout(total=6)) as session: async with aiohttp.ClientSession(headers=header, timeout=aiohttp.ClientTimeout(total=6)) as session:
if isinstance(message, StackedDiscordMessage): if method == "POST":
async with session.post(f"https://discord.com/api/webhooks/{webhook_path}?wait=true", data=repr(message)) as resp: # TODO Detect Invalid Webhook Token async with session.post(f"https://discord.com/api/webhooks/{webhook_path}?wait=true", data=repr(message)) as resp: # TODO Detect Invalid Webhook Token
try: try:
resp_json = await resp.json() resp_json = await resp.json()
@ -279,8 +279,8 @@ async def send_to_discord_webhook(message: [StackedDiscordMessage, DiscordMessag
logger.exception(f"Could not decode JSON response from Discord. Response: {await resp.text()}]") logger.exception(f"Could not decode JSON response from Discord. Response: {await resp.text()}]")
return await handle_discord_http(resp.status, repr(message), resp) return await handle_discord_http(resp.status, repr(message), resp)
elif method == "DELETE": elif method == "DELETE":
async with session.request(method=message.method, url=f"https://discord.com/api/webhooks/{webhook_path}/messages/{message.discord_callback_message_id}") as resp: async with session.request(method=method, url=f"https://discord.com/api/webhooks/{webhook_path}/messages/{message.discord_callback_message_id}") as resp:
return await handle_discord_http(resp.status, repr(message), resp) return await handle_discord_http(resp.status, repr(message), resp)
elif method == "PATCH": elif method == "PATCH":
async with session.request(method=message.method, url=f"https://discord.com/api/webhooks/{webhook_path}/messages/{message.discord_callback_message_id}", data=repr(message)) as resp: async with session.request(method=method, url=f"https://discord.com/api/webhooks/{webhook_path}/messages/{message.discord_callback_message_id}", data=repr(message)) as resp:
return await handle_discord_http(resp.status, repr(message), resp) return await handle_discord_http(resp.status, repr(message), resp)

View file

@ -79,7 +79,7 @@ class MessageHistory:
async def find_all_revids(self, page_id: int) -> list[int]: async def find_all_revids(self, page_id: int) -> list[int]:
"""Function to find all revisions for a page in message history""" """Function to find all revisions for a page in message history"""
result = [] result = []
async for item in dbmanager.fetch_rows(f"SELECT DISTINCT rev_id FROM rcgcdb_msg_metadata INNER JOIN rcgcdb_msg_metadata ON rcgcdb_msg_metadata.message_id = rcgcdb_msg_history.message_id INNER JOIN rcgcdb ON rcgcdb_msg_history.webhook = rcgcdb.webhook WHERE rcgcdb.wiki = $1 AND page_id = $2", (self.wiki.script_url, page_id)): async for item in dbmanager.fetch_rows(f"SELECT DISTINCT rev_id FROM rcgcdb_msg_metadata INNER JOIN rcgcdb_msg_history ON rcgcdb_msg_metadata.message_id = rcgcdb_msg_history.message_id INNER JOIN rcgcdb ON rcgcdb_msg_history.webhook = rcgcdb.webhook WHERE rcgcdb.wiki = $1 AND page_id = $2", self.wiki.script_url, page_id):
result.append(item["rev_id"]) result.append(item["rev_id"])
return result return result
@ -107,7 +107,7 @@ class MessageHistory:
@staticmethod @staticmethod
def register_message(stacked_message: StackedDiscordMessage): def register_message(stacked_message: StackedDiscordMessage):
"""Registers a message in the database""" """Registers a message in the database"""
dbmanager.add(("INSERT INTO rcgcdb_msg_history(message_id, webhook, message_object) VALUES ($1, $2, $3);", dbmanager.add(("INSERT INTO rcgcdb_msg_history(message_id, webhook, message_object) VALUES ($1, $2, $3) ON CONFLICT (message_id) DO UPDATE SET message_object = $3;",
(stacked_message.discord_callback_message_id, stacked_message.webhook, pickle.dumps(stacked_message)))) (stacked_message.discord_callback_message_id, stacked_message.webhook, pickle.dumps(stacked_message))))
for stack_id, message in enumerate(stacked_message): for stack_id, message in enumerate(stacked_message):
dbmanager.add(("INSERT INTO rcgcdb_msg_metadata(message_id, log_id, page_id, rev_id, message_display, stacked_index) VALUES ($1, $2, $3, $4, $5, $6);", dbmanager.add(("INSERT INTO rcgcdb_msg_metadata(message_id, log_id, page_id, rev_id, message_display, stacked_index) VALUES ($1, $2, $3, $4, $5, $6);",
@ -153,7 +153,6 @@ class Wiki:
"namespaces": self.namespaces, "namespaces": self.namespaces,
"tags": self.tags, "tags": self.tags,
"recache_requested": self.recache_requested, "recache_requested": self.recache_requested,
"cached_discord_messages": len(self.message_history),
"discord_message_history": [message.json() for message in self.message_history[-10:]] "discord_message_history": [message.json() for message in self.message_history[-10:]]
} }
if self.domain.name == "fandom.com": if self.domain.name == "fandom.com":
@ -238,11 +237,11 @@ class Wiki:
if "user" in censored_properties and "url" in message["author"]: if "user" in censored_properties and "url" in message["author"]:
message["author"]["name"] = context._("hidden") message["author"]["name"] = context._("hidden")
message["author"].pop("url") message["author"].pop("url")
if "action" in censored_properties and "url" in message: if "action" in censored_properties and "url" in message.embed:
message["title"] = context._("~~hidden~~") message["title"] = context._("~~hidden~~")
message["embed"].pop("url") message.embed.pop("url")
if "content" in censored_properties and "fields" in message: if "content" in censored_properties and "fields" in message.embed:
message["embed"].pop("fields") message.embed.pop("fields")
if "comment" in censored_properties: if "comment" in censored_properties:
message["description"] = context._("~~hidden~~") message["description"] = context._("~~hidden~~")
logger.debug(f"Rev-deleting contents of message {stacked_message.discord_callback_message_id} due to being in list of ids {ids}.") logger.debug(f"Rev-deleting contents of message {stacked_message.discord_callback_message_id} due to being in list of ids {ids}.")