aboutsummaryrefslogtreecommitdiffstats
path: root/bot/cogs/moderation.py
diff options
context:
space:
mode:
authorGravatar Leon Sandøy <[email protected]>2018-10-06 21:22:21 +0000
committerGravatar Leon Sandøy <[email protected]>2018-10-06 21:22:21 +0000
commita9b280e819de555a3f52d0e0f37da002122eae93 (patch)
tree4442cf1f0f88faa1b13d40413ce6242c5ca673ac /bot/cogs/moderation.py
parentMerge branch 'better-moderation' into 'master' (diff)
parentAdd Reminders cog. (diff)
Merge branch 'remind-command' into 'master'
Add Reminders cog. See merge request python-discord/projects/bot!55
Diffstat (limited to '')
-rw-r--r--bot/cogs/moderation.py29
1 files changed, 4 insertions, 25 deletions
diff --git a/bot/cogs/moderation.py b/bot/cogs/moderation.py
index 79e7f0f9f..4a0e4c0f4 100644
--- a/bot/cogs/moderation.py
+++ b/bot/cogs/moderation.py
@@ -1,5 +1,4 @@
import asyncio
-import datetime
import logging
import textwrap
from typing import Dict
@@ -14,6 +13,8 @@ from bot.constants import Colours, Event, Icons, Keys, Roles, URLs
from bot.converters import InfractionSearchQuery
from bot.decorators import with_role
from bot.pagination import LinePaginator
+from bot.utils.scheduling import create_task
+from bot.utils.time import parse_rfc1123, wait_until
log = logging.getLogger(__name__)
@@ -754,10 +755,7 @@ class Moderation:
if infraction_id in self.expiration_tasks:
return
- task: asyncio.Task = asyncio.ensure_future(self._scheduled_expiration(infraction_object), loop=loop)
-
- # Silently ignore exceptions in a callback (handles the CancelledError nonsense)
- task.add_done_callback(_silent_exception)
+ task: asyncio.Task = create_task(loop, self._scheduled_expiration(infraction_object))
self.expiration_tasks[infraction_id] = task
@@ -787,12 +785,7 @@ class Moderation:
# transform expiration to delay in seconds
expiration_datetime = parse_rfc1123(infraction_object["expires_at"])
- delay = expiration_datetime - datetime.datetime.now(tz=datetime.timezone.utc)
- delay_seconds = delay.total_seconds()
-
- if delay_seconds > 1.0:
- log.debug(f"Scheduling expiration for infraction {infraction_id} in {delay_seconds} seconds")
- await asyncio.sleep(delay_seconds)
+ await wait_until(expiration_datetime)
log.debug(f"Marking infraction {infraction_id} as inactive (expired).")
await self._deactivate_infraction(infraction_object)
@@ -855,20 +848,6 @@ class Moderation:
# endregion
-RFC1123_FORMAT = "%a, %d %b %Y %H:%M:%S GMT"
-
-
-def parse_rfc1123(time_str):
- return datetime.datetime.strptime(time_str, RFC1123_FORMAT).replace(tzinfo=datetime.timezone.utc)
-
-
-def _silent_exception(future):
- try:
- future.exception()
- except Exception: # noqa: S110
- pass
-
-
def setup(bot):
bot.add_cog(Moderation(bot))
log.info("Cog loaded: Moderation")