Телеграм бот на питоне с обратным вызовом - PullRequest
0 голосов
/ 07 января 2019

Я использую модуль python-telegram-bot.

Я хочу написать бота, похожего на @vkmusic_bot:

  1. Пользователь отправляет поисковому запросу с именем песни на бот
  2. Бот обрабатывает эту строку запроса и отправляет пользователю меню параметров файла
  3. Пользователь выбирает нужную ему песню и нажимает на соответствующую кнопку
  4. Бот отправляет .mp3 файл пользователю

Пример пользовательского интерфейса

Мой вопрос касается работы с обратными вызовами. Особенно меня смущает шаг 2 - как создать меню и как бот анализирует выбор пользователя?

1 Ответ

0 голосов
/ 10 января 2019

Отказ от ответственности: я использую другую платформу, поэтому я дам вам ссылки на документацию Telegram Bot API и пример в curl. Все ниже только пример; может быть много способов достичь вашей цели.


как мне составить меню?

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

В основном меню здесь представляет собой InlineKeyboardMarkup объект , который содержит массив InlineKeyboardButton объектов . Каждая кнопка должна иметь 2 указанных свойства:

  1. text - это просто заголовок кнопки
  2. callback_data - это свойство содержит текстовые данные, которые позже будут использоваться ботом для определения, какая кнопка была нажата пользователем. Это зависит от вас, как хранить информацию в этой собственности. Обратите внимание, что размер этого свойства ограничен 64 байтами.

Таким образом, callback_data может использоваться для идентификации конкретного файла .mp3. Это похоже на id кнопки и id песни. Возможно, вам следует хранить ассоциации между путями файлов на вашем жестком диске (например) и их соответствующими id. Бот должен быть в состоянии найти путь к файлу в этой базе данных с указанным id, а затем найти файл на диске.

Наконец, когда ваше меню готово, отправьте его как свойство reply_markup в sendMessage метод .

Простой curl Пример:

curl -v -H "Content-Type: application/json" \
-d '{"chat_id": <YOUR_USER_ID>, "text": "Choose the song:", "reply_markup": {"inline_keyboard": [[{"text": "song 1", "callback_data": "file78435675234"}],[{"text": "song 2", "callback_data": "file789231467982134"}],[{"text": "song 3", "callback_data": "file135423854423"}]]}}' \
https://api.telegram.org/bot<YOUR_BOT_ID>/sendMessage

как бот анализирует выбор пользователя?

Если вы используете встроенную клавиатуру из приведенного выше примера, бот может получить информацию о выборе пользователя из data свойства CallbackQuery объекта входящего обновления .

Поэтому, когда пользователь нажимает определенную кнопку в меню, бот получает 1) user_id и 2) callback_data этой кнопки.

С этой информацией бот сможет найти нужный файл .mp3 на диске и затем использовать sendAudio метод , чтобы отправить этот файл пользователю.

...