mirror of
https://gitlab.com/chicken-riders/RcGcDb.git
synced 2025-02-23 00:54:09 +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.config import settings
|
||||||
from src.database import db_cursor
|
from src.database import db_cursor
|
||||||
from src.i18n import langs
|
from src.i18n import langs
|
||||||
|
from src.exceptions import EmbedListFull
|
||||||
from asyncio import TimeoutError
|
from asyncio import TimeoutError
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
@ -66,17 +67,16 @@ class DiscordMessage:
|
||||||
return json.dumps(self.webhook_object)
|
return json.dumps(self.webhook_object)
|
||||||
|
|
||||||
def __setup_embed(self):
|
def __setup_embed(self):
|
||||||
|
"""Setup another embed"""
|
||||||
self.embed = defaultdict(dict)
|
self.embed = defaultdict(dict)
|
||||||
if "embeds" not in self.webhook_object:
|
if "embeds" not in self.webhook_object:
|
||||||
self.webhook_object["embeds"] = [self.embed]
|
self.webhook_object["embeds"] = [self.embed]
|
||||||
else:
|
else:
|
||||||
|
if len(self.webhook_object["embeds"]) > 9:
|
||||||
|
raise EmbedListFull
|
||||||
self.webhook_object["embeds"].append(self.embed)
|
self.webhook_object["embeds"].append(self.embed)
|
||||||
self.embed["color"] = None
|
self.embed["color"] = None
|
||||||
|
|
||||||
def add_embed(self):
|
|
||||||
self.finish_embed()
|
|
||||||
self.__setup_embed()
|
|
||||||
|
|
||||||
def finish_embed(self):
|
def finish_embed(self):
|
||||||
if self.embed["color"] is None:
|
if self.embed["color"] is None:
|
||||||
if settings["appearance"]["embed"].get(self.event_type, {"color": None})["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
|
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
|
# Monitoring webhook functions
|
||||||
async def wiki_removal_monitor(wiki_url, status):
|
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))
|
await send_to_discord_webhook_monitoring(DiscordMessage("compact", "webhook/remove", content="Removing {} because {}.".format(wiki_url, status), webhook_url=[None], wiki=None))
|
||||||
|
|
|
@ -21,3 +21,6 @@ class QueueEmpty(Exception):
|
||||||
|
|
||||||
class ListFull(Exception):
|
class ListFull(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class EmbedListFull(Exception):
|
||||||
|
pass
|
|
@ -1,6 +1,7 @@
|
||||||
import asyncio, logging, aiohttp
|
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 src.config import settings
|
||||||
|
from math import ceil
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
logger = logging.getLogger("rcgcdw.msgqueue")
|
logger = logging.getLogger("rcgcdw.msgqueue")
|
||||||
|
|
||||||
|
@ -42,6 +43,18 @@ class MessageQueue:
|
||||||
|
|
||||||
async def send_msg_set(self, msg_set: tuple):
|
async def send_msg_set(self, msg_set: tuple):
|
||||||
webhook_url, messages = msg_set # str("daosdkosakda/adkahfwegr34", list(DiscordMessage, DiscordMessage, DiscordMessage)
|
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:
|
for msg in messages:
|
||||||
if self.global_rate_limit:
|
if self.global_rate_limit:
|
||||||
return # if we are globally rate limited just wait for first gblocked request to finish
|
return # if we are globally rate limited just wait for first gblocked request to finish
|
||||||
|
|
Loading…
Reference in a new issue