Some work on message stacking (GONE WRONG)

This commit is contained in:
Frisk 2020-11-21 23:33:57 +01:00
parent 2cc020dc43
commit f3a4094474
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
3 changed files with 37 additions and 5 deletions

View file

@ -5,6 +5,7 @@ from src.misc import logger
from src.config import settings
from src.database import db_cursor
from src.i18n import langs
from src.exceptions import EmbedListFull
from asyncio import TimeoutError
import aiohttp
@ -66,17 +67,16 @@ class DiscordMessage:
return json.dumps(self.webhook_object)
def __setup_embed(self):
"""Setup another embed"""
self.embed = defaultdict(dict)
if "embeds" not in self.webhook_object:
self.webhook_object["embeds"] = [self.embed]
else:
if len(self.webhook_object["embeds"]) > 9:
raise EmbedListFull
self.webhook_object["embeds"].append(self.embed)
self.embed["color"] = None
def add_embed(self):
self.finish_embed()
self.__setup_embed()
def finish_embed(self):
if self.embed["color"] is None:
if settings["appearance"]["embed"].get(self.event_type, {"color": None})["color"] is None:
@ -103,6 +103,22 @@ class DiscordMessage:
self.webhook_object["username"] = name
class StackedDiscordMessage(DiscordMessage):
def __init__(self, discordmessage: DiscordMessage):
if isinstance(discordmessage, StackedDiscordMessage):
raise TypeError("Cannot transform StackedDiscordMessage")
self.__dict__ = discordmessage.__dict__
def stack(self, messages: list):
for message in messages:
self.add_embed(message.embed)
def add_embed(self, embed):
self.finish_embed()
self.__setup_embed()
self.embed = embed
# Monitoring webhook functions
async def wiki_removal_monitor(wiki_url, status):
await send_to_discord_webhook_monitoring(DiscordMessage("compact", "webhook/remove", content="Removing {} because {}.".format(wiki_url, status), webhook_url=[None], wiki=None))

View file

@ -21,3 +21,6 @@ class QueueEmpty(Exception):
class ListFull(Exception):
pass
class EmbedListFull(Exception):
pass

View file

@ -1,6 +1,7 @@
import asyncio, logging, aiohttp
from src.discord import send_to_discord_webhook
from src.discord import send_to_discord_webhook, DiscordMessage, StackedDiscordMessage
from src.config import settings
from math import ceil
from collections import defaultdict
logger = logging.getLogger("rcgcdw.msgqueue")
@ -42,6 +43,18 @@ class MessageQueue:
async def send_msg_set(self, msg_set: tuple):
webhook_url, messages = msg_set # str("daosdkosakda/adkahfwegr34", list(DiscordMessage, DiscordMessage, DiscordMessage)
if len(messages) > 1 and messages[0].message_type == "embed":
for i, msg in enumerate(messages):
if isinstance(msg, DiscordMessage):
break
for group_index in range(ceil(len(messages)/10)):
message_group_index = group_index*10+i
stackable = StackedDiscordMessage(messages[message_group_index]) #TODO Find a way to replace item on the list with stacked message
for message in messages[message_group_index+1:message_group_index+9]:
stackable.add_embed(message.embed)
self._queue.remove(message)
messages.remove(message)
for msg in messages:
if self.global_rate_limit:
return # if we are globally rate limited just wait for first gblocked request to finish