You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:14:32