Телеграм-бот, как обработать сообщение рядом с командой

#python #api #bots #telegram

Вопрос:

Я использую pyTelegramBotAPI, и у меня была идея создать 2 команды для бота: имя пользователя и пароль (не важно для чего), чтобы, как только пользователь бота нажмет на «/имя пользователя», следующее сообщение, которое он отправит, будет его именем пользователя, и то же самое для его пароля:

 @bot.message_handler(commands=['username'])
def send_welcome(message):
    bot.send_message(message.chat.id, "Type your username: ")
 

Но тогда я не знаю, как поступить, я пытался с:

 @bot.message_handler(commands=['username'])
def send_welcome(message):
    bot.send_message(message.chat.id, "Type your username: ")
    @bot.message_handler(func=lambda message: True)
    def echo_message(message):
        bot.send_message(message.chat.id, "So, I'm answering to his username at this point: ")
 

Однако с тех пор функция никогда не покидается, и все следующие сообщения: «Итак, в данный момент я отвечаю на его имя пользователя: «…

Какая-нибудь помощь?

Ответ №1:

Вам нужно использовать метод bot.register_next_step_handler ().

Итак, измените обработчик команды start в:

 @bot.message_handler(commands=['username'])
def send_welcome(message):
    msg = bot.send_message(message.chat.id, "Type your username: ")
    bot.register_next_step_handler(msg, function)
 

Вместо function этого вы должны указать имя функции, которая разрабатывает новое сообщение. Так:

 def function(message):
    bot.send_message(message.chat.id, "So, I'm answering to his username at this point: {}".format(message.text))
 

Счастливого кодирования!