diff --git a/aiogram_bot/handlers/simple_admin.py b/aiogram_bot/handlers/simple_admin.py
index 25d6e7e..cbe8947 100644
--- a/aiogram_bot/handlers/simple_admin.py
+++ b/aiogram_bot/handlers/simple_admin.py
@@ -1,4 +1,5 @@
import asyncio
+import datetime
from contextlib import suppress
from typing import List, Optional
@@ -84,12 +85,16 @@ async def cmd_ro(message: types.Message, chat: Chat):
logger.error("Failed to restrict chat member: {error!r}", error=e)
return False
+ if duration >= datetime.timedelta(days=367):
+ duration = "forever"
+ else:
+ duration = format_timedelta(
+ duration, locale=chat.language, granularity="seconds", format="short"
+ )
+
await message.reply_to_message.answer(
_("Read-only activated for user {user}. Duration: {duration}").format(
- user=message.reply_to_message.from_user.get_mention(),
- duration=format_timedelta(
- duration, locale=chat.language, granularity="seconds", format="short"
- ),
+ user=message.reply_to_message.from_user.get_mention(), duration=duration
)
)
return True
@@ -120,12 +125,16 @@ async def cmd_ban(message: types.Message, chat: Chat):
logger.error("Failed to kick chat member: {error!r}", error=e)
return False
+ if duration >= datetime.timedelta(days=367):
+ duration = "forever"
+ else:
+ duration = format_timedelta(
+ duration, locale=chat.language, granularity="seconds", format="short"
+ )
+
await message.reply_to_message.answer(
_("User {user} banned for {duration}").format(
- user=message.reply_to_message.from_user.get_mention(),
- duration=format_timedelta(
- duration, locale=chat.language, granularity="seconds", format="short"
- ),
+ user=message.reply_to_message.from_user.get_mention(), duration=duration
)
)
return True
diff --git a/aiogram_bot/utils/timedelta.py b/aiogram_bot/utils/timedelta.py
index 0637b47..fb4802a 100644
--- a/aiogram_bot/utils/timedelta.py
+++ b/aiogram_bot/utils/timedelta.py
@@ -4,8 +4,8 @@
from aiogram import types
-PATTERN = re.compile(r"(?P\d+)(?P[wdhms])")
-LINE_PATTERN = re.compile(r"^(\d+[wdhms]){1,}$")
+PATTERN = re.compile(r"(?P\d+)(?P[wdhms])|^(?Pforever)$")
+LINE_PATTERN = re.compile(r"^(\d+[wdhms])+$|^(forever)$")
MODIFIERS = {
"w": datetime.timedelta(weeks=1),
@@ -26,6 +26,8 @@ def parse_timedelta(value: str) -> datetime.timedelta:
raise TimedeltaParseError("Invalid time format")
try:
+ if PATTERN.match(value).group("keyword"):
+ return datetime.timedelta(days=367)
result = datetime.timedelta()
for match in PATTERN.finditer(value):
value, modifier = match.groups()