Тг бот. Некорректно работает register_next_step_handler из библиотеки telebot

homiak495

Новичок
Пользователь
Мар 10, 2023
2
0
1
Добрый день!
Помогите, пожалуйста, разобраться, что я сделал не так. Смысл бота : есть 4 человека. При получении команды /birthday бот уточняет имя, потом отправляет дату рождения.
Есть 2 Алексея, поэтому создается ветвление. Если имя Алексей, то бот уточняет фамилию и вызывает новую функцию aleksey(message). Проблема в том, что когда бот получает сообщение "алексей", он сразу отправляет ответ "Не знаю этого человека", после чего все равно ждет сообщение от пользователя, и после получения сообщения, отрабатывает корректно. Видимо в качестве сообщения для функции aleksey(message) он принимает предыдущее сообщение "алексей", выдает ответ, после получает фамилию "Иванов" и отправляет нужную дату. Как сделать, чтобы бот ждал второе сообщение?

Python:
import telebot
from telebot import types

token = "мой токен"

bot=telebot.TeleBot(token)


Birthdays = {'18 марта': ['ваня', 'иван'],
             '15 марта': ['вова','владимир'],}
            
Aleks = ['алексей', 'леша']

def aleksey(message):
    new_message = message.text.lower()
    petrov = 'петров'
    ivanov = 'иванов'
    if new_message == petrov:
        bot.send_message(message.chat.id, "27 марта")
    elif new_message == ivanov:
        bot.send_message(message.chat.id, "30 октября")
    else:
        bot.send_message(message.chat.id, "Не знаю этого человека")

def get_key(d, value):
    for k, v in d.items():
        if v == value:
            return k

@bot.message_handler(commands=['birthday'])
def birthday(message):
    bot.send_message(message.chat.id, "Введите имя")
    bot.register_next_step_handler(message,name)
def name(message):
    if message.text.lower() in Aleks:
        bot.send_message(message.chat.id, "Уточните фамилию")
        bot.register_next_step_handler(message, aleksey)
        aleksey(message)
    else:
        k = 0
        names = Birthdays.values()
        for i in names:
            if message.text.lower() in i:
                text = get_key(Birthdays, i)
                bot.send_message(message.chat.id, text)
                k+=1
        if k == False:
            bot.send_message(message.chat.id, 'Не знаю этого человека')
            
bot.polling(none_stop=True)
 
Последнее редактирование:

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
465
128
43
попробуй убрать вызов функции aleksey(message) из name()
 
  • Мне нравится
Реакции: regnor

homiak495

Новичок
Пользователь
Мар 10, 2023
2
0
1
попробуй убрать вызов функции aleksey(message) из name()
Спасибо! Помогло.
 

Форум IT Специалистов