from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import CommandHandler, CallbackQueryHandler, ConversationHandler, ContextTypes from db import AsyncSessionLocal from models import Admin, Channel, Group, Button ADMIN_MENU, PREVIEW_POST = range(2) async def admin_panel(update: Update, context: ContextTypes.DEFAULT_TYPE): user_id = update.effective_user.id if update.effective_user else None async with AsyncSessionLocal() as session: # Получаем каналы и группы, которыми управляет админ channels_result = await session.execute(Channel.__table__.select().where(Channel.admin_id == user_id)) channels = channels_result.scalars().all() groups_result = await session.execute(Group.__table__.select().where(Group.admin_id == user_id)) groups = groups_result.scalars().all() # Статистика buttons_result = await session.execute(Button.__table__.select()) buttons = buttons_result.scalars().all() stats = f"Каналов: {len(channels)}\nГрупп: {len(groups)}\nКнопок: {len(buttons)}" text = f"Ваша админ-панель\n\n{stats}\n\nВаши каналы:\n" + '\n'.join([f"- {c.name}" for c in channels]) + "\n\nВаши группы:\n" + '\n'.join([f"- {g.name}" for g in groups]) keyboard = [] # Кнопка предпросмотра поста (можно доработать) keyboard.append([InlineKeyboardButton("Предпросмотр поста", callback_data="preview_post")]) await update.message.reply_text(text, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode='HTML') return ADMIN_MENU async def preview_post_callback(update: Update, context: ContextTypes.DEFAULT_TYPE): query = update.callback_query await query.answer() # Здесь можно реализовать предпросмотр поста с кнопками await query.edit_message_text("Здесь будет предпросмотр поста с кнопками.") return ConversationHandler.END admin_panel_conv = ConversationHandler( entry_points=[CommandHandler('admin', admin_panel)], states={ ADMIN_MENU: [CallbackQueryHandler(preview_post_callback, pattern="preview_post")], }, fallbacks=[] )