RcGcDb/src/msgqueue.py

62 lines
1.7 KiB
Python
Raw Normal View History

2020-07-21 12:15:40 +00:00
import asyncio, logging, aiohttp
from src.discord import send_to_discord_webhook
2020-07-21 12:15:40 +00:00
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.".format(len(self._queue)))
2020-07-19 13:32:54 +00:00
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-22 11:43:18 +00:00
await asyncio.sleep(4.0)
2020-07-19 13:32:54 +00:00
messagequeue = MessageQueue()
async def send_to_discord(msg):
messagequeue.add_message(msg)