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._queue: list[QueueEntry] = []
|
||||||
self.webhook_suspensions: dict[str, asyncio.Task] = {} # Storing tasks counting one hour since last 404
|
self.webhook_suspensions: dict[str, asyncio.Task] = {} # Storing tasks counting one hour since last 404
|
||||||
self.global_rate_limit = False
|
self.global_rate_limit = False
|
||||||
|
self.discord_error_rate_tracker: float = 0.0
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self._queue
|
return self._queue
|
||||||
|
@ -90,6 +91,9 @@ class MessageQueue:
|
||||||
def cut_messages(self, item_num: int):
|
def cut_messages(self, item_num: int):
|
||||||
self._queue = self._queue[item_num:]
|
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):
|
async def suspension_check(self, webhook_url: str):
|
||||||
"""Check after an hour if suspended webhook still returns ClientError"""
|
"""Check after an hour if suspended webhook still returns ClientError"""
|
||||||
logger.debug(f"Putting webhook {webhook_url} into suspension. Checking status in 2 hours.")
|
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):
|
except (aiohttp.ServerConnectionError, aiohttp.ServerTimeoutError, asyncio.TimeoutError):
|
||||||
# Retry on next Discord message sent attempt
|
# 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"}.")
|
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
|
return
|
||||||
except aiohttp.ClientError as e:
|
except aiohttp.ClientError as e:
|
||||||
client_error = True
|
client_error = True
|
||||||
|
@ -198,6 +203,7 @@ class MessageQueue:
|
||||||
if message and message.metadata.domain is not None:
|
if message and message.metadata.domain is not None:
|
||||||
message.metadata.domain.discord_message_registration()
|
message.metadata.domain.discord_message_registration()
|
||||||
if client_error is False:
|
if client_error is False:
|
||||||
|
self.track_discord_error_rate(-0.2) # decay on successful sends
|
||||||
if method == "POST":
|
if method == "POST":
|
||||||
msg.webhook = webhook_url
|
msg.webhook = webhook_url
|
||||||
msg.wiki.add_message(msg)
|
msg.wiki.add_message(msg)
|
||||||
|
@ -225,7 +231,7 @@ class MessageQueue:
|
||||||
tasks_to_run.append(self.send_msg_set(set_msgs))
|
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
|
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
|
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()
|
messagequeue = MessageQueue()
|
||||||
|
|
Loading…
Reference in a new issue