aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/cogs/moderation.py34
-rw-r--r--bot/cogs/superstarify/__init__.py11
-rw-r--r--bot/utils/time.py6
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)