@marselabdullin

Почему бот отвечает только на второе сообщение?

Бот отвечает только на второе сообщение по кнопке. В чем причина?
import telebot


bot = telebot.TeleBot(token='***')

button1 = telebot.types.KeyboardButton('Я ищу проект')
button2 = telebot.types.KeyboardButton('Я ищу команду')

main_markup = telebot.types.ReplyKeyboardMarkup().add(
    button1).add(button2)


@bot.message_handler(commands=['start', 'help'], content_types=['text'])
def process_start_command(message):
    bot.send_message(message.chat.id, "Привет! {0}".format(message.chat.first_name))
    bot.send_message(message.chat.id, "Чем я могу помочь тебе?",
                     reply_markup=main_markup)
    bot.register_next_step_handler(message, name)


@bot.message_handler(content_types=['text'])
def process_start_command(message):
    bot.register_next_step_handler(message, name)

def name(msg):
    if msg.text == 'Я ищу команду':
        answer = 'Все проекты'
    if msg.text == 'Я ищу проект':
        answer = 'Все участники'

    bot.send_message(msg.chat.id, answer)
                     

if __name__ == '__main__':
   bot.polling(none_stop=True, interval=0, timeout=0)


5f5e4c33698d3732345913.png
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
@efters
В функции name вы не ставите снова next_step_handler, соответственно в следующий раз вызывается стандартный обработчик, который никак не реагирует, но ставит next_step_handler. Второе сообщение будет уже обработано правильно.

Правильный код name
def name(msg):
    answer = 0
    
    if (msg.text == "Я ищу команду"):
        answer = "Все проекты"

    if (msg.text == "Я ищу проект"):
        answer = "Все участники"

    bot.register_next_step_handler (msg, name)
    if (answer):    # без этого, если ни один из if не отработает, бот упадёт с ошибкой
        bot.send_message(msg.chat.id, answer)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы