56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
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("✅ Сообщение закреплено")
|