Загрузка...

Интерактивные интерфейсы и асинхронное программирование в Telegram (работа с кнопками в телегам)

Код из файлов
Файл №1: util.py
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.constants import ParseMode

# Универсальная функция для получения объекта сообщения
def get_message(update: Update):
return update.message or update.callback_query.message

# Отправка текста с Markdown
async def send_text(update: Update, context, text: str):
message = get_message(update)
await message.reply_text(text, parse_mode=ParseMode.MARKDOWN)

# Отправка фото
async def send_photo(update: Update, context, name: str):
message = get_message(update)
with open(f'resources/images/{name}.jpg', 'rb') as photo:
await message.reply_photo(photo)

# Отправка Inline-кнопок
async def send_text_buttons(update: Update, context, text: str, buttons: dict):
message = get_message(update)
keyboard = [[InlineKeyboardButton(v, callback_data=k)] for k, v in buttons.items()]
reply_markup = InlineKeyboardMarkup(keyboard)
await message.reply_text(text, reply_markup=reply_markup)

Файл №2: bot.py
from telegram.ext import ApplicationBuilder, MessageHandler, filters, CallbackQueryHandler
from gpt import *
from util import *

# 1. Обработка любого входящего текста
async def hello(update, context):
await send_text(update, context, "*Привет!* Вы запустили интерактивное меню.")
await send_photo(update, context, "avatar_main")

# Меню с 3 кнопками
await send_text_buttons(update, context, "Выберите направление:", {
"btn_it": "💻 Программирование",
"btn_robot": "🤖 Робототехника",
"btn_help": "❓ Помощь"
})

# 2. Обработка нажатий на Inline-кнопки
async def hello_button(update, context):
query = update.callback_query.data
await update.callback_query.answer() # убирает "часики"

if query == "btn_it":
await send_text(update, context, "Вы выбрали IT! Готовим среду разработки...")
elif query == "btn_robot":
await send_text(update, context, "Вы выбрали Робототехнику! Включаем моторы...")
elif query == "btn_help":
await send_text(update, context, "Вы можете выбрать IT или Робототехнику для обучения. Выберите кнопку выше.")

# Настройка и запуск
app = ApplicationBuilder().token("ВАШ_ТОКЕН").build()
app.add_handler(MessageHandler(filters.TEXT, hello))
app.add_handler(CallbackQueryHandler(hello_button))

print("Бот запущен...")
app.run_polling()

Видео Интерактивные интерфейсы и асинхронное программирование в Telegram (работа с кнопками в телегам) канала Павел Зворыгин
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять