diff options
| -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)  |