mirror of
https://gitlab.com/chicken-riders/RcGcDb.git
synced 2025-02-22 00:44:10 +00:00
Some work on message stacking (GONE WRONG)
This commit is contained in:
parent
2cc020dc43
commit
f3a4094474
|
@ -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))
|
||||
|
|
|
@ -20,4 +20,7 @@ class QueueEmpty(Exception):
|
|||
pass
|
||||
|
||||
class ListFull(Exception):
|
||||
pass
|
||||
|
||||
class EmbedListFull(Exception):
|
||||
pass
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue