Files
post_bot/handlers/channel_buttons.py
Choi A.K. d17f0f5507
Some checks failed
continuous-integration/drone/push Build is failing
async refactor & docker deploy environment
2025-09-05 12:04:58 +09:00

54 lines
2.2 KiB
Python

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import CommandHandler, CallbackQueryHandler, ConversationHandler, ContextTypes
from db import AsyncSessionLocal
from models import Channel, Button
SELECT_CHANNEL, MANAGE_BUTTONS = range(2)
async def channel_buttons_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
from sqlalchemy import select
session = AsyncSessionLocal()
try:
channels_result = await session.execute(select(Channel))
channels = channels_result.scalars().all()
keyboard = [[InlineKeyboardButton(f'{getattr(c, "name", str(c.name))}', callback_data=str(getattr(c, "id", str(c.id))))] for c in channels]
if update.message:
await update.message.reply_text(
"Выберите канал для настройки клавиатуры:",
reply_markup=InlineKeyboardMarkup(keyboard)
)
return SELECT_CHANNEL
return ConversationHandler.END
finally:
await session.close()
async def select_channel(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
if query and query.data:
await query.answer()
channel_id = int(query.data)
if context.user_data is None:
context.user_data = {}
context.user_data['channel_id'] = channel_id
from sqlalchemy import select
session = AsyncSessionLocal()
try:
buttons_result = await session.execute(select(Button).where(Button.channel_id == channel_id))
buttons = buttons_result.scalars().all()
text = "Кнопки этого канала:\n"
for b in buttons:
text += f"- {b.name}: {b.url}\n"
text += "\nДобавить новую кнопку: /add_button\nУдалить: /del_button <название>"
await query.edit_message_text(text)
finally:
await session.close()
return ConversationHandler.END
channel_buttons_conv = ConversationHandler(
entry_points=[CommandHandler('channel_buttons', channel_buttons_start)],
states={
SELECT_CHANNEL: [CallbackQueryHandler(select_channel)],
},
fallbacks=[]
)