mirror of
https://gitlab.com/chicken-riders/RcGcDb.git
synced 2025-02-23 00:54:09 +00:00
Added Discord message cooldown in case Discord is returning server errors not to spam servers with messages
This commit is contained in:
parent
f81942a962
commit
b37e4bb8b4
|
@ -67,6 +67,7 @@ class MessageQueue:
|
|||
self._queue: list[QueueEntry] = []
|
||||
self.webhook_suspensions: dict[str, asyncio.Task] = {} # Storing tasks counting one hour since last 404
|
||||
self.global_rate_limit = False
|
||||
self.discord_error_rate_tracker: float = 0.0
|
||||
|
||||
def __repr__(self):
|
||||
return self._queue
|
||||
|
@ -90,6 +91,9 @@ class MessageQueue:
|
|||
def cut_messages(self, item_num: int):
|
||||
self._queue = self._queue[item_num:]
|
||||
|
||||
def track_discord_error_rate(self, number: float):
|
||||
self.discord_error_rate_tracker = max(0, min(self.discord_error_rate_tracker+number, settings["max_discord_additional_await_time"]))
|
||||
|
||||
async def suspension_check(self, webhook_url: str):
|
||||
"""Check after an hour if suspended webhook still returns ClientError"""
|
||||
logger.debug(f"Putting webhook {webhook_url} into suspension. Checking status in 2 hours.")
|
||||
|
@ -184,6 +188,7 @@ class MessageQueue:
|
|||
except (aiohttp.ServerConnectionError, aiohttp.ServerTimeoutError, asyncio.TimeoutError):
|
||||
# Retry on next Discord message sent attempt
|
||||
logger.debug(f"Received timeout or connection error when sending a Discord message for {msg.wiki.script_url if hasattr(msg, "wiki") else "PATCH OR DELETE MESSAGE"}.")
|
||||
self.track_discord_error_rate(1)
|
||||
return
|
||||
except aiohttp.ClientError as e:
|
||||
client_error = True
|
||||
|
@ -198,6 +203,7 @@ class MessageQueue:
|
|||
if message and message.metadata.domain is not None:
|
||||
message.metadata.domain.discord_message_registration()
|
||||
if client_error is False:
|
||||
self.track_discord_error_rate(-0.2) # decay on successful sends
|
||||
if method == "POST":
|
||||
msg.webhook = webhook_url
|
||||
msg.wiki.add_message(msg)
|
||||
|
@ -225,7 +231,7 @@ class MessageQueue:
|
|||
tasks_to_run.append(self.send_msg_set(set_msgs))
|
||||
await asyncio.gather(*tasks_to_run) # we wait for all send_msg_set functions to finish
|
||||
self._queue = [x for x in self._queue if x.complete() is False] # get rid of sent messages
|
||||
await asyncio.sleep(1)
|
||||
await asyncio.sleep(1+self.discord_error_rate_tracker)
|
||||
|
||||
|
||||
messagequeue = MessageQueue()
|
||||
|
|
Loading…
Reference in a new issue