diff options
| author | 2018-10-06 21:22:21 +0000 | |
|---|---|---|
| committer | 2018-10-06 21:22:21 +0000 | |
| commit | a9b280e819de555a3f52d0e0f37da002122eae93 (patch) | |
| tree | 4442cf1f0f88faa1b13d40413ce6242c5ca673ac /bot/cogs/moderation.py | |
| parent | Merge branch 'better-moderation' into 'master' (diff) | |
| parent | Add 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.py | 29 |
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") |