Skip to content

Commit 40a14d1

Browse files
committed
Add "forever" keyword for !ro and !ban #10
1 parent e16aa0f commit 40a14d1

2 files changed

Lines changed: 21 additions & 10 deletions

File tree

app/handlers/simple_admin.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import datetime
23
from contextlib import suppress
34
from typing import List
45

@@ -43,12 +44,16 @@ async def cmd_ro(message: types.Message, chat: Chat):
4344
logger.error("Failed to restrict chat member: {error!r}", error=e)
4445
return False
4546

47+
if duration >= datetime.timedelta(days=367):
48+
duration = "forever"
49+
else:
50+
duration = format_timedelta(
51+
duration, locale=chat.language, granularity="seconds", format="short"
52+
)
53+
4654
await message.reply_to_message.answer(
4755
_("<b>Read-only</b> activated for user {user}. Duration: {duration}").format(
48-
user=message.reply_to_message.from_user.get_mention(),
49-
duration=format_timedelta(
50-
duration, locale=chat.language, granularity="seconds", format="short"
51-
),
56+
user=message.reply_to_message.from_user.get_mention(), duration=duration
5257
)
5358
)
5459
return True
@@ -78,12 +83,16 @@ async def cmd_ban(message: types.Message, chat: Chat):
7883
logger.error("Failed to kick chat member: {error!r}", error=e)
7984
return False
8085

86+
if duration >= datetime.timedelta(days=367):
87+
duration = "forever"
88+
else:
89+
duration = format_timedelta(
90+
duration, locale=chat.language, granularity="seconds", format="short"
91+
)
92+
8193
await message.reply_to_message.answer(
8294
_("User {user} <b>banned</b> for {duration}").format(
83-
user=message.reply_to_message.from_user.get_mention(),
84-
duration=format_timedelta(
85-
duration, locale=chat.language, granularity="seconds", format="short"
86-
),
95+
user=message.reply_to_message.from_user.get_mention(), duration=duration
8796
)
8897
)
8998
return True

app/utils/timedelta.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
from aiogram import types
66

7-
PATTERN = re.compile(r"(?P<value>\d+)(?P<modifier>[wdhms])")
8-
LINE_PATTERN = re.compile(r"^(\d+[wdhms]){1,}$")
7+
PATTERN = re.compile(r"(?P<value>\d+)(?P<modifier>[wdhms])|^(?P<keyword>forever)$")
8+
LINE_PATTERN = re.compile(r"^(\d+[wdhms])+$|^(forever)$")
99

1010
MODIFIERS = {
1111
"w": datetime.timedelta(weeks=1),
@@ -26,6 +26,8 @@ def parse_timedelta(value: str) -> datetime.timedelta:
2626
raise TimedeltaParseError("Invalid time format")
2727

2828
try:
29+
if PATTERN.match(value).group("keyword"):
30+
return datetime.timedelta(days=367)
2931
result = datetime.timedelta()
3032
for match in PATTERN.finditer(value):
3133
value, modifier = match.groups()

0 commit comments

Comments
 (0)