From e7a40b47183299f2fa3d466b2ed53d5f1f8cdb4a Mon Sep 17 00:00:00 2001 From: "Choi A.K." Date: Fri, 5 Sep 2025 15:40:28 +0900 Subject: [PATCH] add_group, add_Channel process modification --- handlers/add_channel.py | 64 ++++++++++++++++++++++++++++++------ handlers/add_group.py | 73 ++++++++++++++++++++++++++++++++--------- init_db.py | 11 +++++++ main.py | 8 ++--- 4 files changed, 127 insertions(+), 29 deletions(-) diff --git a/handlers/add_channel.py b/handlers/add_channel.py index 505cdd8..904f19d 100644 --- a/handlers/add_channel.py +++ b/handlers/add_channel.py @@ -1,18 +1,62 @@ + from telegram import Update -from telegram.ext import ContextTypes +from telegram.ext import ContextTypes, ConversationHandler, CommandHandler, MessageHandler, filters from db import AsyncSessionLocal from models import Channel -async def add_channel(update: Update, context: ContextTypes.DEFAULT_TYPE): - args = context.args or [] - if update.message is None: - return - if len(args) < 2: - await update.message.reply_text('Используйте: /add_channel <название> <ссылка>') - return - name, link = args[0], args[1] +INPUT_NAME, INPUT_LINK = range(2) + +async def add_channel_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_channel_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['channel_name'] = name + context.user_data['channel_link'] = link + return await save_channel(update, context) + else: + context.user_data['channel_name'] = text + if update.message: + await update.message.reply_text('Теперь отправьте ссылку на канал:') + return INPUT_LINK + +async def input_channel_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['channel_link'] = link + return await save_channel(update, context) + +async def save_channel(update: Update, context: ContextTypes.DEFAULT_TYPE): + if context.user_data is None: + context.user_data = {} + name = context.user_data.get('channel_name') + link = context.user_data.get('channel_link') + if not name or not link: + if update.message: + await update.message.reply_text('Ошибка: не указано название или ссылка.') + return ConversationHandler.END async with AsyncSessionLocal() as session: channel = Channel(name=name, link=link) session.add(channel) await session.commit() - await update.message.reply_text(f'Канал "{name}" добавлен.') + if update.message: + await update.message.reply_text(f'Канал "{name}" добавлен.') + return ConversationHandler.END + +add_channel_conv = ConversationHandler( + entry_points=[CommandHandler('add_channel', add_channel_start)], + states={ + INPUT_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_channel_name)], + INPUT_LINK: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_channel_link)], + }, + fallbacks=[] +) diff --git a/handlers/add_group.py b/handlers/add_group.py index 8ecfe46..2ca7649 100644 --- a/handlers/add_group.py +++ b/handlers/add_group.py @@ -1,19 +1,62 @@ + from telegram import Update -from telegram.ext import ContextTypes +from telegram.ext import ContextTypes, ConversationHandler, CommandHandler, MessageHandler, filters from db import AsyncSessionLocal from models import Group -async def add_group(update: Update, context: ContextTypes.DEFAULT_TYPE): - args = context.args or [] - if update.message is None: - return - if len(args) < 2: - await update.message.reply_text('Используйте: /add_group <название> <ссылка>') - return - name, link = args[0], args[1] - session = AsyncSessionLocal() - group = Group(name=name, link=link) - session.add(group) - session.commit() - session.close() - await update.message.reply_text(f'Группа "{name}" добавлена.') +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=[] +) diff --git a/init_db.py b/init_db.py index a907163..f419a69 100644 --- a/init_db.py +++ b/init_db.py @@ -1,5 +1,16 @@ +import os import asyncio from db import init_db +# Проверка bot.db перед инициализацией +if os.path.exists("bot.db") and os.path.isdir("bot.db"): + print("Удаляю папку bot.db...") + import shutil + + shutil.rmtree("bot.db") +if not os.path.exists("bot.db"): + print("Создаю пустой файл bot.db...") + open("bot.db", "a").close() + if __name__ == "__main__": asyncio.run(init_db()) diff --git a/main.py b/main.py index a6410f3..c84a329 100644 --- a/main.py +++ b/main.py @@ -65,8 +65,8 @@ async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text(help_text, parse_mode='HTML') # Импорт обработчиков -from handlers.add_channel import add_channel -from handlers.add_group import add_group +from handlers.add_channel import add_channel_conv +from handlers.add_group import add_group_conv from handlers.add_button import add_button_conv from handlers.new_post import new_post_conv from handlers.group_buttons import group_buttons_conv @@ -84,8 +84,8 @@ def main(): application = Application.builder().token(TELEGRAM_TOKEN).build() application.add_handler(CommandHandler('start', start)) application.add_handler(CommandHandler('help', help_command)) - application.add_handler(CommandHandler('add_channel', add_channel)) - application.add_handler(CommandHandler('add_group', add_group)) + application.add_handler(add_channel_conv) + application.add_handler(add_group_conv) application.add_handler(add_button_conv) application.add_handler(new_post_conv) application.add_handler(group_buttons_conv)