Files
post-proposal-bot/src/bot/handlers/menu/callbacks.py
2026-04-16 01:16:54 +02:00

63 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, Message
from bot.factories import AddChannelStates, MenuAction, MenuCallback
from bot.filters import ChannelOwnerFilter
from bot.handlers.menu.helpers import edit_menu
from bot.keyboards import channel_settings_kb
from utils.db.models import Channel, User
router = Router()
@router.callback_query(MenuCallback.filter(F.action == MenuAction.PAGE))
async def show_menu_page(callback: CallbackQuery, callback_data: MenuCallback):
if callback.from_user is None or not isinstance(callback.message, Message):
return
await edit_menu(callback.message, callback.from_user.id, callback_data.page)
await callback.answer()
@router.callback_query(MenuCallback.filter(F.action == MenuAction.SELECT))
async def toggle_active_channel(callback: CallbackQuery, callback_data: MenuCallback):
if callback.from_user is None or not isinstance(callback.message, Message):
return
user = await User.get_or_create(callback.from_user.id)
if user.active_channel_id == callback_data.channel_id:
user.active_channel_id = None
else:
user.active_channel_id = callback_data.channel_id
await user.save()
await edit_menu(callback.message, callback.from_user.id, callback_data.page)
await callback.answer()
@router.callback_query(
MenuCallback.filter(F.action == MenuAction.SETTINGS), ChannelOwnerFilter()
)
async def open_channel_settings(callback: CallbackQuery, channel: Channel):
if not isinstance(callback.message, Message):
return
await callback.message.edit_text(
f"⚙️ <b>{channel.title}</b>", reply_markup=channel_settings_kb(channel)
)
await callback.answer()
@router.callback_query(MenuCallback.filter(F.action == MenuAction.ADD))
async def request_channel_reference(callback: CallbackQuery, state: FSMContext):
if not isinstance(callback.message, Message):
return
await state.set_state(AddChannelStates.waiting_channel)
await callback.message.edit_text(
"Отправьте @username или числовой ID канала.\n"
"Бот должен быть добавлен как админ с правом отправки сообщений."
)
await callback.answer()