It's version 0.6 I add users DB

This commit is contained in:
Niken
2025-11-16 14:15:44 +03:00
parent e1837400ef
commit be9ec785f4
5 changed files with 192 additions and 50 deletions
+61 -19
View File
@@ -4,11 +4,43 @@ from models.state import BotState
from services.schedule_service import ScheduleService
from utils.antispam import is_chat_spam, saving
from storage.message_storage import save_message
from storage.users_storage import set_group, get_group
from aiogram.utils.keyboard import InlineKeyboardBuilder
VALID_GROUPS = [
"603Т", "33мд", "32мд", "31тс", "30тс", "29то", "28то", "27д", "26д", "25тм", "24тм",
"23д", "22мд", "21мд", "20тс", "19тс", "18то", "17то", "16д", "15д", "14тм", "13тм",
"12д", "11мд", "10мд", "8тс", "7то", "7Ст", "6то", "6Сб", "", "5Cа", "4Сб", "3тм",
"3Са", "2тм", "2Cб", "1Са", "600Р", "601Р", "602д"
]
def register_handlers(dp: Dispatcher, state: BotState):
@dp.message(Command("rasp"))
@saving
async def send_schedule(message: types.Message):
"""Отправка расписания (текст)"""
if is_chat_spam(message.chat.id, state):
await message.answer("НЕ СПАМЬТЕ!!!")
return
args = message.text.split(maxsplit=2)
# Определяем группу
if len(args) > 1:
group = args[1].strip()
else:
group = get_group(message.from_user.id)
# Определяем смещение по дню
day_offset = int(args[2]) if len(args) > 2 and args[2].isdigit() else 0
schedule_service = ScheduleService()
text, url, day, month = await schedule_service.get_schedule(group, day_offset)
msg = await message.answer(text, parse_mode="Markdownv2")
save_message(msg.chat.id, msg.message_id)
@dp.message(Command("prasp"))
@saving
async def send_schedule(message: types.Message):
"""Отправка расписания"""
if is_chat_spam(message.chat.id, state):
@@ -16,25 +48,10 @@ def register_handlers(dp: Dispatcher, state: BotState):
return
args = message.text.split(maxsplit=2)
group = args[1].strip() if len(args) > 1 else "30тс"
day_offset = int(args[2]) if len(args) > 2 and args[2].isdigit() else 0
schedule_service = ScheduleService()
text, url, day, month = await schedule_service.get_schedule(group, day_offset)
# Отправляем текст расписания
msg = await message.answer(text, parse_mode="Markdownv2")
save_message(message.chat.id, msg.message_id)
@dp.message(Command("prasp"))
async def send_schedule(message: types.Message):
"""Отправка расписания"""
if is_chat_spam(message.chat.id, state):
await message.answer("НЕ СПАМЬТЕ!!!")
return
args = message.text.split(maxsplit=2)
group = args[1].strip() if len(args) > 1 else "30тс"
if len(args) > 1:
group = args[1].strip()
else:
group = get_group(message.from_user.id)
day_offset = int(args[2]) if len(args) > 2 and args[2].isdigit() else 0
schedule_service = ScheduleService()
@@ -54,3 +71,28 @@ def register_handlers(dp: Dispatcher, state: BotState):
state.file_id_cache[group.lower()] = msg.photo[-1].file_id
else:
await message.answer(f"Не удалось найти расписание для {group}")
@dp.message(Command("set"))
@saving
async def set(message: types.Message):
# создаём клавиатуру
builder = InlineKeyboardBuilder()
for group in VALID_GROUPS:
builder.button(text=group, callback_data=f"set_group:{group}")
builder.adjust(5) # количество кнопок в строке
await message.answer(
"Выбери группу из списка:",
reply_markup=builder.as_markup()
)
@dp.callback_query(lambda c: c.data.startswith("set_group:"))
async def process_group_choice(callback: types.CallbackQuery):
group = callback.data.split(":")[1]
set_group(callback.from_user.id, group)
# редактируем сообщение: убираем клавиатуру
await callback.message.edit_reply_markup(reply_markup=None)
await callback.message.answer(f"✅ Группа установлена: {group}")
await callback.answer()