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"⚙️ {channel.title}", 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()