35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
from aiogram import types, Dispatcher, Bot
|
|
from aiogram.filters import Command
|
|
from models.state import BotState
|
|
from services.schedule_service import ScheduleService
|
|
from utils.antispam import is_chat_spam
|
|
from storage.message_storage import save_message
|
|
|
|
|
|
def register_handlers(dp: Dispatcher, state: BotState, bot: Bot):
|
|
@dp.message(Command("rasp"))
|
|
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тс"
|
|
day_offset = int(args[2]) if len(args) > 2 and args[2].isdigit() else 0
|
|
|
|
schedule_service = ScheduleService()
|
|
clip_png, url, day, mouth = await schedule_service.get_schedule(group, day_offset)
|
|
|
|
if clip_png:
|
|
save_message(message.chat.id, message.message_id)
|
|
|
|
msg = await message.answer_photo(
|
|
types.BufferedInputFile(clip_png, filename=f"{group}.png"),
|
|
caption=f"Расписание для {group} на {day}.{mouth:02d}"
|
|
)
|
|
save_message(message.chat.id, msg.message_id)
|
|
|
|
state.file_id_cache[group.lower()] = msg.photo[-1].file_id
|
|
else:
|
|
await message.answer(f"Не удалось найти расписание для {group}") |