@Urchulka

Как сделать, чтобы бот отвечал определенным сообщением с Inline кнопками на слово, которое я ему отправлю?

Здравствуйте, у меня вопрос:
Я хочу написать бота, чтобы он не на кнопки/команды отвечал определенными сообщениями, а на то, что я ему напишу. Вот например: у меня есть бот, навигация по нему происходит через Inline кнопки, если отправить ему любое сообщение, будь то буква или слово, он в ответ присылает главное меню, а мне нужно, чтобы он на определенные слова отвечал не главным меню, а другим подменю с Inline кнопками, но при этом другие слова, которые не нужны, отфильтровывал.
import telebot;
import random;
from telebot import types;
bot = telebot.TeleBot('*****')

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

    bot.send_message(message.from_user.id, f"Привет, {message.from_user.first_name}. Введите Ваш город")
    @bot.callback_query_handler(func=lambda call: True)
def query_handler(call):
    bot.answer_callback_query(callback_query_id=call.id)


Вот на сообщение "Введите Ваш город", пользователь должен отправить свой город и бот отправит ему меню с Inline кнопками, в зависимости от выбранного города.

Надеюсь, понятно объяснила. Если нет, то спрашивайте в комментариях, я перефразирую, только помогите, пожалуйста, не проходите мимо, долго пыталась найти способ как это делать, так и не нашла
  • Вопрос задан
  • 480 просмотров
Пригласить эксперта
Ответы на вопрос 1
ilya_krasin
@ilya_krasin
Начинающий программист
Сделать это можно вот так:
import telebot
from telebot import types

bot = telebot.TeleBot('TOKKEN') #здесь должен быть токкен вашего бота

@bot.message_handler(commands=['start', 'menu'])
def Welcom(message):
 mesg = bot.send_message(message.chat.id, f"Привет, {message.from_user.first_name}. Введите Ваш город")
 bot.register_next_step_handler(mesg, city) #здесь бот ждёт пока пользователь введёт что либо в чат
 
def city(message):
  if message.text == 'Москва': #здесь мы указываем то что должен ввести пользователь
    bot.send_message(message.chat.id, 'Москва ваш город') #если пользователь ввёл нужное слово или фразу то бот отправит это сообщение
  else:
          bot.send_message(message.chat.id, 'Мне не удалось ничего найти') #если пользователь ввел что-то не то бот отправит это сообщение 
 
bot.polling(none_stop=True)

В строке bot.register_next_step_handler(mesg, city) mesg - это переменная в которую вы помещаете сообщение, а city - это название функции отвечающей за то какие слова и фразы должен писать пользователь чтобы бот ему ответил.
Так же к сообщению можно прикрепить кнопки, просто пропишите их после message.text == 'Москва': и прикрепите к сообщению, аналогично и с остальными фразами .
Для добавления большего количества фраз просто отделяйте каждое сообщение с помощью elif
Пример:
def city(message):
  if message.text == 'Москва':
    bot.send_message(message.chat.id, 'Москва ваш город') 
  elif message.text == 'Санкт-Петербург':
    bot.send_message(message.chat.id, 'Санкт-Петербург ваш город')
  else:
          bot.send_message(message.chat.id, 'Мне не удалось ничего найти')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы