• Почему телеграм-бот не воспринимает личные сообщения, если начать общаться с ним в беседе?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Бот не может первым написать пользователю, для начала пользователю нужно самому начать диалог с ботом. Это на будущее
    2. Вы привязываете следующий шаг пользователя в том же чате, где и ведется переписка, т.е. в беседе. Бот ждет сообщение там, а пользователь пишет в ЛС. Используйте bot.register_next_step_handler_by_chat_id(). Первым аргументом он принимает ID чата, в котором будет бот ждать сообщение. Соответственно, туда нужно засунуть ID пользователя. Итог:
    Заменяем
    bot.register_next_step_handler(message, dogovor, userID)
    на
    bot.register_next_step_handler_by_chat_id(userID, dogovor)


    И не нужно делать глобальных переменных. Если хотите передать информацию о пользователе дальше, так же передавайте ее через аргументы в register_next_step_handler. Рекомендую создать хотя бы словарь вида {'number': 123, 'surname': 'surname'}.
    В итоге будет нечто такое:
    def dogovor(message):  # получаем фамилию
        num_dog = message.text
        user_info = {'num_dog': num_dog}
        bot.send_message(message.chat.id, 'Какая у тебя фамилия?')
        bot.register_next_step_handler(message, get_surname, user_info)
    
    def get_surname(message, user_info):  # получаем фамилию
        user_info['surname'] = message.text
        print('Фамилия:', user_info['surname'], '. Номер договора:', user_info['dog_num'])


    ps: на будущее - оборачивайте свой код с помощью соотствующей кнопки < / >
    Ответ написан
    Комментировать