Files
post_bot/.history/handlers/add_button_20250903222834.py
Andrey K. Choi aca280b64d
Some checks failed
continuous-integration/drone Build is failing
init commit
2025-09-04 01:51:59 +09:00

64 lines
2.6 KiB
Python

from telegram import Update
from telegram.ext import ContextTypes, ConversationHandler, CommandHandler, CallbackQueryHandler, MessageHandler, filters
from db import SessionLocal
from models import Channel, Group, Button
SELECT_TARGET, INPUT_NAME, INPUT_URL = range(3)
async def add_button_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
session = SessionLocal()
channels = session.query(Channel).all()
groups = session.query(Group).all()
session.close()
keyboard = []
for c in channels:
keyboard.append([{'text': f'Канал: {c.name}', 'callback_data': f'channel_{c.id}'}])
for g in groups:
keyboard.append([{'text': f'Группа: {g.name}', 'callback_data': f'group_{g.id}'}])
if not keyboard:
await update.message.reply_text('Нет каналов или групп для добавления кнопки.')
return ConversationHandler.END
await update.message.reply_text('Выберите канал или группу:', reply_markup=None)
context.user_data['keyboard'] = keyboard
return SELECT_TARGET
async def select_target(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer()
data = query.data
context.user_data['target'] = data
await query.edit_message_text('Введите название кнопки:')
return INPUT_NAME
async def input_name(update: Update, context: ContextTypes.DEFAULT_TYPE):
context.user_data['button_name'] = update.message.text
await update.message.reply_text('Введите ссылку для кнопки:')
return INPUT_URL
async def input_url(update: Update, context: ContextTypes.DEFAULT_TYPE):
url = update.message.text
name = context.user_data['button_name']
target = context.user_data['target']
session = SessionLocal()
if target.startswith('channel_'):
channel_id = int(target.split('_')[1])
button = Button(name=name, url=url, channel_id=channel_id)
else:
group_id = int(target.split('_')[1])
button = Button(name=name, url=url, group_id=group_id)
session.add(button)
session.commit()
session.close()
await update.message.reply_text('Кнопка добавлена.')
return ConversationHandler.END
add_button_conv = ConversationHandler(
entry_points=[CommandHandler('add_button', add_button_start)],
states={
SELECT_TARGET: [CallbackQueryHandler(select_target)],
INPUT_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_name)],
INPUT_URL: [MessageHandler(filters.TEXT & ~filters.COMMAND, input_url)],
},
fallbacks=[]
)