from asyncio import create_task from aiogram import Router, F from aiogram.filters import Command from aiogram.fsm.context import FSMContext from aiogram.types import Message, CallbackQuery from bot.core.bots import BotInfo, bot from bot.filters import IsOwner from bot.templates import msg from bot.utils import status_clear from bot.utils.auto_delete import auto_delete_message from configs import COMMANDS __all__ = ("router",) CMD: str = "pin".lower() router: Router = Router(name=f"{CMD}_cmd_router") @router.message(Command(*COMMANDS[CMD], prefix=BotInfo.prefix, ignore_case=True), IsOwner()) async def pin_cmd(message: Message, state: FSMContext) -> None: """ Обработчик команды /pin для закрепления последнего сообщения или ответа. """ await status_clear(message=message, state=state) # Если есть reply → закрепляем его, иначе закрепляем саму команду target = message.reply_to_message or message await bot.pin_chat_message(chat_id=message.chat.id, message_id=target.message_id, disable_notification=False) # Автоудаление через 7 суток create_task(auto_delete_message(chat_id=message.chat.id, message_id=target.message_id, delay=604800)) await msg(message=message, text="✅ Сообщение успешно закреплено") @router.callback_query(F.data.casefold().isin(COMMANDS[CMD]), IsOwner()) async def pin_callback(callback: CallbackQuery, state: FSMContext) -> None: """ Обработчик кнопки с callback_data="pin". """ await status_clear(message=callback.message, state=state) await bot.pin_chat_message(chat_id=callback.message.chat.id, message_id=callback.message.message_id, disable_notification=False) create_task(auto_delete_message(chat_id=callback.message.chat.id, message_id=callback.message.message_id, delay=604800)) await callback.answer("✅ Сообщение закреплено")