Обработчик команды /pin для закрепов (В бета!)
This commit is contained in:
77
bot/handlers/commands/admins/pin_cmd.py
Normal file
77
bot/handlers/commands/admins/pin_cmd.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
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 для закрепления последнего сообщения или ответа.
|
||||||
|
"""
|
||||||
|
# Если есть reply → закрепляем его, иначе закрепляем предыдущее сообщение
|
||||||
|
if message.reply_to_message:
|
||||||
|
target_message_id = message.reply_to_message.message_id
|
||||||
|
else:
|
||||||
|
# Закрепляем предыдущее сообщение (команда - 1)
|
||||||
|
target_message_id = message.message_id - 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
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(update=message, text="✅ Сообщение успешно закреплено", state=state)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
await msg(update=message, text=f"❌ Ошибка закрепления: {e}", state=state)
|
||||||
|
|
||||||
|
|
||||||
|
@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(update=callback.message, state=state)
|
||||||
|
|
||||||
|
try:
|
||||||
|
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("✅ Сообщение закреплено")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
await callback.answer(f"❌ Ошибка: {e}", show_alert=True)
|
||||||
Reference in New Issue
Block a user