41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from datetime import datetime, timedelta
|
||
from app.models import Group
|
||
|
||
|
||
async def can_send_message(group: Group) -> tuple[bool, int]:
|
||
"""
|
||
Проверить, можно ли отправить сообщение в группу с учетом slow mode
|
||
Возвращает (можно_ли_отправить, сколько_секунд_ждать)
|
||
"""
|
||
if group.slow_mode_delay == 0:
|
||
# Нет ограничений
|
||
return True, 0
|
||
|
||
if group.last_message_time is None:
|
||
# Первое сообщение
|
||
return True, 0
|
||
|
||
time_since_last_message = datetime.utcnow() - group.last_message_time
|
||
seconds_to_wait = group.slow_mode_delay - time_since_last_message.total_seconds()
|
||
|
||
if seconds_to_wait <= 0:
|
||
return True, 0
|
||
else:
|
||
return False, int(seconds_to_wait) + 1
|
||
|
||
|
||
async def wait_for_slow_mode(group: Group) -> int:
|
||
"""
|
||
Ждать, пока пройдет slow mode
|
||
Возвращает реальное время ожидания в секундах
|
||
"""
|
||
can_send, wait_time = await can_send_message(group)
|
||
if can_send:
|
||
return 0
|
||
|
||
await asyncio.sleep(wait_time)
|
||
return wait_time
|
||
|
||
|
||
import asyncio
|