diff options
author | 2019-09-26 09:23:52 -0700 | |
---|---|---|
committer | 2019-09-26 09:23:52 -0700 | |
commit | 666df815d2e78b5f234e816100270c9b2ad833c0 (patch) | |
tree | 1a23616f92f8a692ee37291243bf7ee1efa4c1e2 | |
parent | Show when field is unchanged in infraction edit confirmation message (diff) |
Add utility function to consistently format infraction timestamps
The format used is %Y-%m-%d %H:%M.
-rw-r--r-- | bot/cogs/moderation.py | 34 | ||||
-rw-r--r-- | bot/cogs/superstarify/__init__.py | 11 | ||||
-rw-r--r-- | bot/utils/time.py | 6 |
3 files changed, 18 insertions, 33 deletions
diff --git a/bot/cogs/moderation.py b/bot/cogs/moderation.py index 089642e1b..cb22c866c 100644 --- a/bot/cogs/moderation.py +++ b/bot/cogs/moderation.py @@ -19,7 +19,7 @@ from bot.decorators import with_role from bot.pagination import LinePaginator from bot.utils.moderation import already_has_active_infraction, post_infraction from bot.utils.scheduling import Scheduler, create_task -from bot.utils.time import wait_until +from bot.utils.time import INFRACTION_FORMAT, format_infraction, wait_until log = logging.getLogger(__name__) @@ -313,11 +313,7 @@ class Moderation(Scheduler, Cog): reason=reason ) - infraction_expiration = ( - datetime - .fromisoformat(infraction["expires_at"][:-1]) - .strftime('%c') - ) + infraction_expiration = format_infraction(infraction["expires_at"]) self.schedule_task(ctx.bot.loop, infraction["id"], infraction) @@ -390,11 +386,7 @@ class Moderation(Scheduler, Cog): except Forbidden: action_result = False - infraction_expiration = ( - datetime - .fromisoformat(infraction["expires_at"][:-1]) - .strftime('%c') - ) + infraction_expiration = format_infraction(infraction["expires_at"]) self.schedule_task(ctx.bot.loop, infraction["id"], infraction) @@ -630,11 +622,7 @@ class Moderation(Scheduler, Cog): self.mod_log.ignore(Event.member_update, user.id) await user.add_roles(self._muted_role, reason=reason) - infraction_expiration = ( - datetime - .fromisoformat(infraction["expires_at"][:-1]) - .strftime('%c') - ) + infraction_expiration = format_infraction(infraction["expires_at"]) self.schedule_task(ctx.bot.loop, infraction["id"], infraction) @@ -694,11 +682,7 @@ class Moderation(Scheduler, Cog): except Forbidden: action_result = False - infraction_expiration = ( - datetime - .fromisoformat(infraction["expires_at"][:-1]) - .strftime('%c') - ) + infraction_expiration = format_infraction(infraction["expires_at"]) self.schedule_task(ctx.bot.loop, infraction["id"], infraction) @@ -915,7 +899,7 @@ class Moderation(Scheduler, Cog): confirm_messages.append("marked as permanent") elif expires_at is not None: request_data['expires_at'] = expires_at.isoformat() - confirm_messages.append(f"set to expire on {expires_at.strftime('%c')}") + confirm_messages.append(f"set to expire on {expires_at.strftime(INFRACTION_FORMAT)}") else: confirm_messages.append("expiry unchanged") @@ -1129,11 +1113,11 @@ class Moderation(Scheduler, Cog): active = infraction_object["active"] user_id = infraction_object["user"] hidden = infraction_object["hidden"] - created = datetime.fromisoformat(infraction_object["inserted_at"][:-1]).strftime("%Y-%m-%d %H:%M") + created = format_infraction(infraction_object["inserted_at"]) if infraction_object["expires_at"] is None: expires = "*Permanent*" else: - expires = datetime.fromisoformat(infraction_object["expires_at"][:-1]).strftime("%Y-%m-%d %H:%M") + expires = format_infraction(infraction_object["expires_at"]) lines = textwrap.dedent(f""" {"**===============**" if active else "==============="} @@ -1164,7 +1148,7 @@ class Moderation(Scheduler, Cog): Returns a boolean indicator of whether the DM was successful. """ if isinstance(expires_at, datetime): - expires_at = expires_at.strftime('%c') + expires_at = expires_at.strftime(INFRACTION_FORMAT) embed = Embed( description=textwrap.dedent(f""" diff --git a/bot/cogs/superstarify/__init__.py b/bot/cogs/superstarify/__init__.py index b1936ef3a..87021eded 100644 --- a/bot/cogs/superstarify/__init__.py +++ b/bot/cogs/superstarify/__init__.py @@ -1,6 +1,5 @@ import logging import random -from datetime import datetime from discord import Colour, Embed, Member from discord.errors import Forbidden @@ -13,6 +12,7 @@ from bot.constants import Icons, MODERATION_ROLES, POSITIVE_REPLIES from bot.converters import Duration from bot.decorators import with_role from bot.utils.moderation import post_infraction +from bot.utils.time import format_infraction log = logging.getLogger(__name__) NICKNAME_POLICY_URL = "https://pythondiscord.com/pages/rules/#wiki-toc-nickname-policy" @@ -71,10 +71,7 @@ class Superstarify(Cog): f"Changing the nick back to {before.display_name}." ) await after.edit(nick=forced_nick) - end_timestamp_human = ( - datetime.fromisoformat(infraction['expires_at'][:-1]) - .strftime('%c') - ) + end_timestamp_human = format_infraction(infraction['expires_at']) try: await after.send( @@ -113,9 +110,7 @@ class Superstarify(Cog): [infraction] = active_superstarifies forced_nick = get_nick(infraction['id'], member.id) await member.edit(nick=forced_nick) - end_timestamp_human = ( - datetime.fromisoformat(infraction['expires_at'][:-1]).strftime('%c') - ) + end_timestamp_human = format_infraction(infraction['expires_at']) try: await member.send( diff --git a/bot/utils/time.py b/bot/utils/time.py index c529ccc2b..0d4192921 100644 --- a/bot/utils/time.py +++ b/bot/utils/time.py @@ -4,6 +4,7 @@ import datetime from dateutil.relativedelta import relativedelta RFC1123_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" +INFRACTION_FORMAT = "%Y-%m-%d %H:%M" def _stringify_time_unit(value: int, unit: str) -> str: @@ -95,3 +96,8 @@ async def wait_until(time: datetime.datetime) -> None: # Incorporate a small delay so we don't rapid-fire the event due to time precision errors if delay_seconds > 1.0: await asyncio.sleep(delay_seconds) + + +def format_infraction(timestamp: str) -> str: + """Format an infraction timestamp to a more readable ISO 8601 format.""" + return datetime.datetime.fromisoformat(timestamp[:-1]).strftime(INFRACTION_FORMAT) |