2020-07-21 12:15:40 +00:00
|
|
|
import asyncio, logging, aiohttp
|
|
|
|
from src.misc import send_to_discord_webhook
|
|
|
|
from src.config import settings
|
2020-07-19 13:32:54 +00:00
|
|
|
logger = logging.getLogger("rcgcdw.msgqueue")
|
|
|
|
|
|
|
|
class MessageQueue:
|
|
|
|
"""Message queue class for undelivered messages"""
|
|
|
|
def __init__(self):
|
|
|
|
self._queue = []
|
2020-07-21 12:15:40 +00:00
|
|
|
self.session = None
|
2020-07-19 13:32:54 +00:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return self._queue
|
|
|
|
|
|
|
|
def __len__(self):
|
|
|
|
return len(self._queue)
|
|
|
|
|
|
|
|
def __iter__(self):
|
|
|
|
return iter(self._queue)
|
|
|
|
|
|
|
|
def clear(self):
|
|
|
|
self._queue.clear()
|
|
|
|
|
|
|
|
def add_message(self, message):
|
|
|
|
self._queue.append(message)
|
|
|
|
|
|
|
|
def cut_messages(self, item_num):
|
|
|
|
self._queue = self._queue[item_num:]
|
|
|
|
|
2020-07-21 12:15:40 +00:00
|
|
|
async def create_session(self):
|
|
|
|
self.session = aiohttp.ClientSession(headers=settings["header"], timeout=aiohttp.ClientTimeout(5.0))
|
|
|
|
|
2020-07-19 13:32:54 +00:00
|
|
|
async def resend_msgs(self):
|
2020-07-21 12:15:40 +00:00
|
|
|
if self.session is None:
|
|
|
|
await self.create_session()
|
2020-07-19 13:32:54 +00:00
|
|
|
if self._queue:
|
|
|
|
logger.info(
|
|
|
|
"{} messages waiting to be delivered to Discord due to Discord throwing errors/no connection to Discord servers.".format(
|
|
|
|
len(self._queue)))
|
|
|
|
for num, item in enumerate(self._queue):
|
|
|
|
logger.debug(
|
|
|
|
"Trying to send a message to Discord from the queue with id of {} and content {}".format(str(num),
|
|
|
|
str(item)))
|
2020-07-21 12:15:40 +00:00
|
|
|
if await send_to_discord_webhook(item, self.session) < 2:
|
2020-07-19 13:32:54 +00:00
|
|
|
logger.debug("Sending message succeeded")
|
2020-07-21 12:15:40 +00:00
|
|
|
await asyncio.sleep(1.5)
|
2020-07-19 13:32:54 +00:00
|
|
|
else:
|
|
|
|
logger.debug("Sending message failed")
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
self.clear()
|
|
|
|
logger.debug("Queue emptied, all messages delivered")
|
|
|
|
self.cut_messages(num)
|
|
|
|
logger.debug(self._queue)
|
|
|
|
|
|
|
|
|
2020-07-20 12:03:55 +00:00
|
|
|
messagequeue = MessageQueue()
|
|
|
|
|
|
|
|
|
|
|
|
async def send_to_discord(msg):
|
|
|
|
messagequeue.add_message(msg)
|