63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
|
|
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=[]
|
|
)
|