@RIFaTqq

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

Начинаю общение с ботом в беседе телеграмма, далее он переходит в личные сообщения и пишет пользователю в лс, но когда пользователь отвечает боту в лс, то бот не понимает что пишет пользователь и выполняет условие else, если пользователь напишет в беседе, то он пойдет дальше по скрипту, как сделать чтобы полностью общение было в личке?
код:
elif re.findall(r'.*роутер.*', message.text):
        bot.reply_to(message, "Давайте перейдём в личные сообщения и продолжим обсуждение там")
        bot.send_message(userID, 'Давайте заполним заявку, ответьте на следующие вопросы:')
        bot.send_message(userID, 'Ваш номер договора: ')
        bot.register_next_step_handler(message, dogovor, userID)
     else:
        bot.send_message(message.from_user.id, "я не понял, напиши '/help', чтобы посмотреть список команд")
def dogovor(message, userID):  # получаем фамилию
    print(message.text)
    global num_dog
    num_dog = message.from_user.id.text
    bot.send_message(userID, 'Какая у тебя фамилия?')
    bot.register_next_step_handler(message, get_surname, userID)
  • Вопрос задан
  • 363 просмотра
Решения вопроса 1
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: на будущее - оборачивайте свой код с помощью соотствующей кнопки < / >
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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