init commit
This commit is contained in:
40
app/utils/__init__.py
Normal file
40
app/utils/__init__.py
Normal file
@@ -0,0 +1,40 @@
|
||||
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
|
||||
89
app/utils/keyboards.py
Normal file
89
app/utils/keyboards.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from telegram import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class CallbackType(str, Enum):
|
||||
"""Типы callback'ов для кнопок"""
|
||||
MANAGE_MESSAGES = "manage_messages"
|
||||
MANAGE_GROUPS = "manage_groups"
|
||||
CREATE_MESSAGE = "create_message"
|
||||
CREATE_GROUP = "create_group"
|
||||
VIEW_MESSAGE = "view_message"
|
||||
VIEW_GROUP = "view_group"
|
||||
DELETE_MESSAGE = "delete_message"
|
||||
DELETE_GROUP = "delete_group"
|
||||
ADD_TO_GROUP = "add_to_group"
|
||||
REMOVE_FROM_GROUP = "remove_from_group"
|
||||
SEND_NOW = "send_now"
|
||||
LIST_MESSAGES = "list_messages"
|
||||
LIST_GROUPS = "list_groups"
|
||||
BACK = "back"
|
||||
MAIN_MENU = "main_menu"
|
||||
|
||||
|
||||
def get_main_keyboard() -> InlineKeyboardMarkup:
|
||||
"""Главное меню"""
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton("📨 Сообщения", callback_data=CallbackType.MANAGE_MESSAGES),
|
||||
InlineKeyboardButton("👥 Группы", callback_data=CallbackType.MANAGE_GROUPS),
|
||||
]
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_messages_keyboard() -> InlineKeyboardMarkup:
|
||||
"""Меню управления сообщениями"""
|
||||
keyboard = [
|
||||
[InlineKeyboardButton("➕ Новое сообщение", callback_data=CallbackType.CREATE_MESSAGE)],
|
||||
[InlineKeyboardButton("📜 Список сообщений", callback_data=CallbackType.LIST_MESSAGES)],
|
||||
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU)],
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_groups_keyboard() -> InlineKeyboardMarkup:
|
||||
"""Меню управления группами"""
|
||||
keyboard = [
|
||||
[InlineKeyboardButton("➕ Добавить группу", callback_data=CallbackType.CREATE_GROUP)],
|
||||
[InlineKeyboardButton("📜 Список групп", callback_data=CallbackType.LIST_GROUPS)],
|
||||
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU)],
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_back_keyboard() -> InlineKeyboardMarkup:
|
||||
"""Кнопка назад"""
|
||||
keyboard = [[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU)]]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_message_actions_keyboard(message_id: int) -> InlineKeyboardMarkup:
|
||||
"""Действия с сообщением"""
|
||||
keyboard = [
|
||||
[InlineKeyboardButton("📤 Отправить", callback_data=f"send_msg_{message_id}")],
|
||||
[InlineKeyboardButton("🗑️ Удалить", callback_data=f"delete_msg_{message_id}")],
|
||||
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.LIST_MESSAGES)],
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_group_actions_keyboard(group_id: int) -> InlineKeyboardMarkup:
|
||||
"""Действия с группой"""
|
||||
keyboard = [
|
||||
[InlineKeyboardButton("📝 Сообщения", callback_data=f"group_messages_{group_id}")],
|
||||
[InlineKeyboardButton("🗑️ Удалить", callback_data=f"delete_group_{group_id}")],
|
||||
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.LIST_GROUPS)],
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
|
||||
|
||||
def get_yes_no_keyboard(action: str) -> InlineKeyboardMarkup:
|
||||
"""Подтверждение да/нет"""
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton("✅ Да", callback_data=f"confirm_{action}"),
|
||||
InlineKeyboardButton("❌ Нет", callback_data=CallbackType.MAIN_MENU),
|
||||
]
|
||||
]
|
||||
return InlineKeyboardMarkup(keyboard)
|
||||
Reference in New Issue
Block a user