Skip to content

Commit c80d813

Browse files
committed
support random time in selftimeout
1 parent b42339e commit c80d813

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

cogs/timeout/cog.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,12 +264,16 @@ async def self_timeout(
264264
autocomplete=features.autocomplete_times,
265265
max_length=50,
266266
description=MessagesCZ.time_format,
267+
default=None,
267268
),
268269
):
269270
"""Set timeout for yourself.
270271
Guild_ids is used to prevent users from bypassing timeout
271272
given by moderator and using selftimeout in DMs.
272273
"""
274+
if endtime is None:
275+
endtime = await DiscordDatetime().convert(inter, "random")
276+
273277
await features.time_check(inter.created_at, endtime.utc)
274278

275279
if inter.guild.me.top_role < inter.author.top_role:

utils/converters.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
from __future__ import annotations
44

5+
import random
56
import re
67
import shlex
7-
from datetime import datetime, timezone
8+
from datetime import datetime, timedelta, timezone
89

910
import disnake
1011
from dateutil import parser
@@ -149,31 +150,40 @@ async def convert(cls, _: disnake.ApplicationCommandInteraction, time_string: st
149150
discord_datetime.utc = datetime(9999, 12, 30, 0, 0, 0, tzinfo=timezone.utc)
150151
return discord_datetime
151152

153+
options = ["random"]
154+
if time_string.lower() in options:
155+
# Generate random time between 10 minutes and 24 hours
156+
seconds = random.randint(600, 24 * 3600)
157+
time = datetime.now(timezone.utc) + timedelta(seconds=seconds)
158+
discord_datetime.local = time.astimezone(get_local_zone())
159+
discord_datetime.utc = time.astimezone(timezone.utc)
160+
return discord_datetime
161+
152162
pattern = re.compile(r"(\d+)([yYMwdhms])")
153163
matches = pattern.findall(time_string)
154164

155165
if matches:
156166
time = datetime.now(timezone.utc)
157-
timedelta = None
167+
duration = None
158168
while matches:
159169
match = matches.pop()
160170
value, unit = match
161171
if unit.lower() in ["y", "r"]:
162-
timedelta = relativedelta(years=int(value))
172+
duration = relativedelta(years=int(value))
163173
elif unit == "M":
164-
timedelta = relativedelta(months=int(value))
174+
duration = relativedelta(months=int(value))
165175
elif unit == "w":
166-
timedelta = relativedelta(weeks=int(value))
176+
duration = relativedelta(weeks=int(value))
167177
elif unit == "d":
168-
timedelta = relativedelta(days=int(value))
178+
duration = relativedelta(days=int(value))
169179
elif unit == "h":
170-
timedelta = relativedelta(hours=int(value))
180+
duration = relativedelta(hours=int(value))
171181
elif unit == "m":
172-
timedelta = relativedelta(minutes=int(value))
182+
duration = relativedelta(minutes=int(value))
173183
elif unit == "s":
174-
timedelta = relativedelta(seconds=int(value))
184+
duration = relativedelta(seconds=int(value))
175185
try:
176-
time = time + timedelta
186+
time = time + duration
177187
except ValueError:
178188
raise InvalidTime(Messages.time_format)
179189
else:

0 commit comments

Comments
 (0)