feat: init

This commit is contained in:
h
2026-04-16 01:16:54 +02:00
commit 14bf1047ee
51 changed files with 2227 additions and 0 deletions

View 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()