from telegram import Update from telegram.ext import ContextTypes, ConversationHandler, CommandHandler, MessageHandler, filters from db import AsyncSessionLocal from models import Group INPUT_NAME, INPUT_LINK = range(2) async def add_group_start(update: Update, context: ContextTypes.DEFAULT_TYPE): if context.user_data is None: context.user_data = {} if update.message: await update.message.reply_text('Введите название группы (или "название ссылка" через пробел):') return INPUT_NAME async def input_group_name(update: Update, context: ContextTypes.DEFAULT_TYPE): if context.user_data is None: context.user_data = {} text = update.message.text.strip() if update.message and update.message.text else '' if ' ' in text: name, link = text.split(' ', 1) context.user_data['group_name'] = name context.user_data['group_link'] = link return await save_group(update, context) else: context.user_data['group_name'] = text if update.message: await update.message.reply_text('Теперь отправьте ссылку на группу:') return INPUT_LINK async def input_group_link(update: Update, context: ContextTypes.DEFAULT_TYPE): if context.user_data is None: context.user_data = {} link = update.message.text.strip() if update.message and update.message.text else '' context.user_data['group_link'] = link return await save_group(update, context) async def save_group(update: Update, context: ContextTypes.DEFAULT_TYPE): if context.user_data is None: context.user_data = {} name = context.user_data.get('group_name') link = context.user_data.get('group_link') if not name or not link: if update.message: await update.message.reply_text('Ошибка: не указано название или ссылка.') return ConversationHandler.END async with AsyncSessionLocal() as session: group = Group(name=name, link=link) session.add(group) await session.commit() if update.message: await update.message.reply_text(f'Группа "{name}" добавлена.') return ConversationHandler.END add_group_conv = ConversationHandler( entry_points=[CommandHandler('add_group', add_group_start)], states={ INPUT_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_group_name)], INPUT_LINK: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_group_link)], }, fallbacks=[] )