Telegram机器人无法正确打印用户输入的ID问题求助
Telegram机器人无法正确打印用户输入的ID问题求助
嘿,我一眼就瞅出问题出在哪啦!你现在的代码逻辑是:当用户点击「Send ID」按钮时,直接把这条按钮消息的文本(也就是"Send ID")赋值给了user_message,然后立刻打印出来——这当然只会输出按钮文本,根本没等到用户输入真正的ID呀!
核心问题是你的代码没有跟踪用户的交互状态,不知道用户当前是刚触发了按钮,还是正在输入ID。咱们可以加一个状态变量来解决这个问题,具体修改如下:
import telebot from time import sleep from telebot import types bot = telebot.TeleBot('BOT TOKEN') # 新增一个状态变量,跟踪是否在等待用户输入ID waiting_for_id = False @bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("Send ID") markup.add(btn1) bot.send_message(message.from_user.id, "Ok, let's start!", reply_markup=markup) @bot.message_handler(content_types=['text']) def get_text_messages(message): global waiting_for_id if message.text == 'Send ID': bot.send_message(message.from_user.id, 'Ok, send it please!') # 标记状态:现在需要等待用户输入ID waiting_for_id = True elif waiting_for_id: # 此时用户输入的就是ID,直接打印 user_id = message.text print(f"用户输入的ID是:{user_id}") bot.send_message(message.from_user.id, f"已收到你的ID:{user_id}") # 重置状态,准备下一次交互 waiting_for_id = False bot.polling(none_stop=True, interval=0)
给你解释下关键改动:
- 新增
waiting_for_id全局变量,默认是False,表示当前不需要等待用户输入ID - 当用户点击「Send ID」按钮时,把
waiting_for_id设为True,告诉程序接下来要等用户输入ID - 当
waiting_for_id为True时,用户发送的任何文本都会被当作ID处理,打印后再把状态重置为False
这样修改后,程序就能正确区分用户是触发按钮,还是输入ID啦,再也不会把按钮文本当成ID打印咯!
备注:内容来源于stack exchange,提问作者Endmind
相关产品推荐
相关产品推荐

