Как добавить меню в Телеграм бот python

Рассмотрим разработку и запуск ботов для мессенджера Телеграм. В качестве языка разработки будет использоваться Python. Запускать код на выполнение будем в рабочих тетрадках (блокнотах) замечательной среды разработки Colab компании Google. Код бота, размещенный в Colab, будет взаимодействовать c сервером Telegram через API.

Telegram (от др.-греч. τῆλε «далеко» + др.-греч. γράμμα «запись») — кроссплатформенная система мгновенного обмена сообщениями (мессенджер) с функциями VoIP, позволяющая обмениваться текстовыми, голосовыми и видео- сообщениями, стикерами и фотографиями, файлами многих форматов. Также можно совершать видео- и аудио- звонки и трансляции в каналах и группах, организовывать конференции, многопользовательские группы и каналы. Клиентские приложения Telegram доступны для Android, iOS, Windows Phone, Windows, macOS и Linux.

API (МФА [ˌeɪ.piˈaɪ]; аббр. от англ. Application Programming Interface — «программный интерфейс приложения») — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой. Обычно входит в описание какого-либо интернет-протокола, программного каркаса (фреймворка) или стандарта вызовов функций операционной системы. Часто реализуется отдельной программной библиотекой или сервисом операционной системы. Используется программистами при написании всевозможных приложений.

Как сделать меню для Телеграм бота на aiogram Python

Бот (англ. bot, сокращение от чеш. robot) — виртуальный робот, который функционирует на основе специальной программы, выполняющий автоматически и/или по заданному расписанию какие-либо действия через интерфейсы, предназначенные для людей. Боты находят также применение в условиях, когда требуется лучшая реакция по сравнению с возможностями человека (например, игровые боты, боты для интернет-аукционов и тому подобное) или, реже, для имитации действий человека (например, боты для чатов и тому подобное). Чат-бот может выдать достаточно адекватный ответ на вопрос, сформулированный на правильном русском языке (или любом другом, работа с которым поддерживается). Такие боты часто применяются для сообщения прогноза погоды, результатов спортивных соревнований, курсов валют, биржевых котировок и тому подобное.

Чат-бот — это программа, работающая внутри мессенджера, например Telegram. Такая программа способна отвечать на вопросы, а также самостоятельно задавать их. Чат-боты используются в разных сферах для решения типовых задач.

C точки зрения прикладной информатики (и прикладной информатики в экономике в частности), создание чат-бота — это не только следование последним тенденциям. Прежде всего, речь идёт о сокращении затрат, увеличении конверсии и улучшении качества обслуживания клиентов. Сотни компаний делают всё возможное, чтобы достичь вышеупомянутых целей. И для их достижения необходимы боты как первостепенный инструмент.

Согласно текущей статистике за 2022 год, недвижимость является ведущей отраслью по прибылям от чат-ботов (28 %). Затем идут путешествия (16 %), образование (14 %), здравоохранение (10 %) и финансы (5 %).

Чат-боты могут использоваться в службах поддержки, помогая решить простые вопросы, например, такие как смена пароля.

Еще по теме:  Телеграмм не видит контакты телефона на Андроиде

Чат-боты можно использовать для поиска информации. Например, прогноз погоды, афиша мероприятий.

В сфере путешествий стали одними из первых использовать чат-боты. Чат-бот может предложить направления/рейсы/рестораны — на основании поисковых запросов и предпочтений пользователя. После покупки программа обеспечивает клиентскую поддержку, предоставляя ответы на часто задаваемые вопросы.

Практическая часть

Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — цифро-символьную строку, которая будет однозначно идентифицировать бота.

Необходимо найти бота, нажать кнопку «Запустить» (или написать /start), в ответ BotFather пришлет список доступных команд.

Отправим боту команду /newbot, чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет изобрести адрес бота, причем он должен заканчиваться на слово bot. Например, drach_pro_bot. Если адрес уже кем‑то занят, придётся придумывать новый.

Когда бот будет создан, мы получим сообщение, в котором будет исчерпывающая техническая информация о боте. Обратите внимание, что после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это токен.

Реализуем бота для Telegram, воспользовавшись возможностями языка Python. Понятно, что чтобы бот всегда работал, его код должен быть запущен и выполняться 24 часа в сутки. Значит, потребуется сервер (для надежности под операционной системой Linux), на котором установлен Python. Если такого сервера нет, можно запускать код на собственной домашней машине, но тогда придётся повозиться с настройками роутера. Но есть ещё один интересный вариант, который очень подходит для тестирования и изучения ботов — это Colab.

Работать будем в рабочей тетради Colab, так как это нам даёт замечательные преимущества: не надо устанавливать собственный сервер в Интернет и не надо перенастраивать домашний роутер.

Далее в рабочей тетради Colab проверяем версию Python. Чтобы операция выполнялась на уровне операционной системы (а не языка программирования), перед командой ставим восклицательный знак:

!python3 —version

Должны получить ответ вида:

Python 3.7.13

Для взаимодействия с Telegram API средствами языка Python разработаны несколько модулей. Самый простой из них — Telebot. Устанавливаем необходимый пакет:

!pip3 install pytelegrambotapi

В редчайших случаях, возможно, понадобится написать просто pip вместо pip3.

Задача 1. ЭХО

Сначала реализуем простейшего бота – для понимания процесса. Он будет получать от пользователя текстовое сообщение и возвращать его же. Используем код:

Для запуска бота в Colab нажимаем Ctrl+F9.

Если всё запустилось без ошибок, переходим в Telegram – проверять работу бота. Ищем бота по придуманному ранее адресу. Запускаем бота кнопкой «Запустить» (Start) или командой /start. При правильной работе бот возвращает сообщения отправителю один-в-один.

Задача 2. Бот-всезнайка

Более сложный бот, который будет давать определения для введённых терминов. Черпать информацию будем из Википедии по той причине, что для этого уже разработан прекрасный модуль:

!pip3 install wikipedia

Используем следующий код и запустим его.

Еще по теме:  Как рекламировать товар в Телеграмме

Задача 3. БОТ С ДВУМЯ ВИРТУАЛЬНЫМИ КНОПКАМИ

Во многих ботах для выбора каких‑то действий применяются так называемые виртуальные кнопки. Реализуем ветвление. Пользователь будет выбирать, что он хочет прочитать (например, афоризмы или новости).

Потребуется создать два файла: thinks.txt и facts.txt, которые содержат список сегодняшних новостей и афоризмы. Одна строка – одно утверждение. Лучше создать хотя бы три строки в каждом.

На данном этапе куда удобнее будет привязать Google drive (Гугл-диск) к Colab и загрузить туда текстовые документы.

Команда для привязки Гугл-диска:

from google.colab import drive
drive.mount(‘/content/drive’)

Важно! Если использовать для этого бота тот же токен, что и для предыдущего, то, чтобы увидеть кнопки, потребуется перезапуск командой /start.

Блог дяди Freemanа

Telegram bot (library pyTelegramBotAPI) / Бот Телеграма (библиотека pyTelegramBotAPI)

Для домашних нужд решил я завести себе бота Telegram, дабы получать оповещения и статусы от домашних устройств и автоматики. Сделать все это я решил на Python, поскольку не хотел слишком углубляться в детали, уровня абстракции этого языка вполне достаточно для этой работы.

Итак, для начала Вам нужно себе бота завести. Писать мануал тут будет излишним, их в интернете полно. Приведу тут ссылку на официальный мануал Телеграма по ботам. Получили token бота? Теперь читаем дальше.

1. Подготовка окружения

Как уже сказал выше, для работы бота я использовал готовую библиотеку pyTelegramBotAPI, а значит нам потребуется python, я писал на версии 3.6 под систему ubuntu 18.04 LTS. Все, что надо установить при такой конфигурации это сам python3, pip3 и, конечно, библиотеку.

apt-get update
apt-get install python3
apt-get install python3-pip
pip3 install pyTelegramBotAPI

Теперь все готово для того, чтобы кодить самого бота.

2. Код бота

Самое главное в коде это обработчики событий, то есть обработка того контента, который будет получать бот в ходе своей работы.

Так как бота мы уже создали, у нас есть токен авторизации.

Важное примечание. Запуская бота, имейте ввиду, что есть определенные нюансы, например, вдруг если он упадет, но сообщения боту будут продолжать поступать от пользователей, они накопятся в серверах Телеграма в течении 24 часов и при выходе бота в сеть, прилетят все разом. Поэтому эту ситуацию в коде не забудьте продумать. Слить все сообщения или обработать, Вам решать.

Итак, начало файла telebot_handler.py выглядит так:

# -*- coding: utf-8 -*- import telebot from telebot import types

Тут я указываю, что использую кодировку utf8 — всегда так делаю в python скриптах, а также ссылаюсь на библиотеку telebot и модуль из нее же, там хранятся типы нужных объектов для бота.

bot = telebot.TeleBot(«4xxxxxxx2:Xxxxxxxxxxxx—XXXXxxxxxxxxXXXXXxxXX»)

Это инициализация объекта бота как потомка от типа TeleBot, с указанием токена Вашего бота. после этого этим объектом можно манипулировать, отсылать и принимать сообщения.

2.1 Обработчики событий

Правильный способ создания меню с помощью python-telegram-bot

pic.1

Этот код работает, но у меня такое чувство, что строить длинное дерево elif нерационально.

Еще по теме:  Как скопировать видео из Телеграмма в Ватсап на Андроид

Более того, я не могу понять, как дать пользователю возможность вернуться в главное меню из меню второго уровня (поскольку главное меню находится в другом обработчике, и я не могу поймать его с помощью обратного вызова из >).

Итак, вопрос в том, как лучше всего создавать такие системы меню?

DemX86 1 Июл 2018 в 20:12

2 ответа

Лучший ответ

Вы должны использовать аргумент pattern в CallbackQueryHandler . Также хорошо использовать классы или функции для клавиатуры и сообщений.
Чтобы вернуться в главное меню, добавьте кнопку возврата в подменю с определенным шаблоном обратного вызова.

Обратите внимание : вы используете edit_message_text в меню. Это означает, что ничего не произойдет, если вы вызовете функцию start с методом reply_text из любого меню.

Полный рабочий пример с функциями:

#!/usr/bin/env python3.8 from telegram.ext import Updater from telegram.ext import CommandHandler, CallbackQueryHandler from telegram import InlineKeyboardButton, InlineKeyboardMarkup ############################### Bot ############################################ def start(bot, update): bot.message.reply_text(main_menu_message(), reply_markup=main_menu_keyboard()) def main_menu(bot, update): bot.callback_query.message.edit_text(main_menu_message(), reply_markup=main_menu_keyboard()) def first_menu(bot, update): bot.callback_query.message.edit_text(first_menu_message(), reply_markup=first_menu_keyboard()) def second_menu(bot, update): bot.callback_query.message.edit_text(second_menu_message(), reply_markup=second_menu_keyboard()) def first_submenu(bot, update): pass def second_submenu(bot, update): pass def error(update, context): print(f’Update caused error ‘) ############################ Keyboards ######################################### def main_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Menu 1′, callback_data=’m1’)], [InlineKeyboardButton(‘Menu 2′, callback_data=’m2’)], [InlineKeyboardButton(‘Menu 3′, callback_data=’m3’)]] return InlineKeyboardMarkup(keyboard) def first_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 1-1′, callback_data=’m1_1’)], [InlineKeyboardButton(‘Submenu 1-2′, callback_data=’m1_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) def second_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 2-1′, callback_data=’m2_1’)], [InlineKeyboardButton(‘Submenu 2-2′, callback_data=’m2_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) ############################# Messages ######################################### def main_menu_message(): return ‘Choose the option in main menu:’ def first_menu_message(): return ‘Choose the submenu in first menu:’ def second_menu_message(): return ‘Choose the submenu in second menu:’ ############################# Handlers ######################################### updater = Updater(‘XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’, use_context=True) updater.dispatcher.add_handler(CommandHandler(‘start’, start)) updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern=’main’)) updater.dispatcher.add_handler(CallbackQueryHandler(first_menu, pattern=’m1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_menu, pattern=’m2′)) updater.dispatcher.add_handler(CallbackQueryHandler(first_submenu, pattern=’m1_1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_submenu, pattern=’m2_1′)) updater.dispatcher.add_error_handler(error) updater.start_polling() ################################################################################

Извините, у меня два пробела в табуляции. 🙂

UPD: Исправить объект подменю.

dzNET 15 Ноя 2020 в 15:44
from telegram.ext import CommandHandler, CallbackQueryHandler from telegram import InlineKeyboardButton, InlineKeyboardMarkup ############################### Bot ############################################ def start(update, context): update.message.reply_text(main_menu_message(), reply_markup=main_menu_keyboard()) def main_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=main_menu_message(), reply_markup=main_menu_keyboard()) def first_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=first_menu_message(), reply_markup=first_menu_keyboard()) def second_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=second_menu_message(), reply_markup=second_menu_keyboard()) # and so on for every callback_data option def first_submenu(bot, update): pass def second_submenu(bot, update): pass ############################ Keyboards ######################################### def main_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Option 1′, callback_data=’m1’)], [InlineKeyboardButton(‘Option 2′, callback_data=’m2’)], [InlineKeyboardButton(‘Option 3′, callback_data=’m3’)]] return InlineKeyboardMarkup(keyboard) def first_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 1-1′, callback_data=’m1_1’)], [InlineKeyboardButton(‘Submenu 1-2′, callback_data=’m1_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) def second_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 2-1′, callback_data=’m2_1’)], [InlineKeyboardButton(‘Submenu 2-2′, callback_data=’m2_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) ############################# Messages ######################################### def main_menu_message(): return ‘Choose the option in main menu:’ def first_menu_message(): return ‘Choose the submenu in first menu:’ def second_menu_message(): return ‘Choose the submenu in second menu:’ ############################# Handlers ######################################### updater = Updater(‘YOUR_TOKEN_HERE’, use_context=True) updater.dispatcher.add_handler(CommandHandler(‘start’, start)) updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern=’main’)) updater.dispatcher.add_handler(CallbackQueryHandler(first_menu, pattern=’m1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_menu, pattern=’m2′)) updater.dispatcher.add_handler(CallbackQueryHandler(first_submenu, pattern=’m1_1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_submenu, pattern=’m2_1′)) updater.start_polling()

Источник: question-it.com

Рейтинг
( Пока оценок нет )
Загрузка ...