feat: init
This commit is contained in:
62
src/bot/handlers/menu/callbacks.py
Normal file
62
src/bot/handlers/menu/callbacks.py
Normal file
@@ -0,0 +1,62 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user