如何在Telegram Bot中获取触发命令的用户姓名与ID?
获取Telegram Bot命令触发用户的信息
你现在遇到的问题很清晰:bot.get_me() 这个方法本身就是用来获取机器人自身信息的,所以你拿到的必然是Bot的ID和名称。要获取触发/info命令的用户信息,根本不用额外调用API——回调函数里的message参数已经包含了发送消息的用户的所有核心数据。
修改后的完整代码
import telebot bot = telebot.TeleBot('<BotToken>') @bot.message_handler(commands=['info']) def send_welcome(message): # 从message对象中直接提取用户信息 user = message.from_user # 提取关键字段,同时处理字段为None的情况 user_id = user.id first_name = user.first_name last_name = user.last_name or "无" username = user.username or "无" # 控制台打印用户信息 print(f"触发命令的用户信息:ID={user_id}, 姓名={first_name} {last_name}, 用户名={username}") # 回复用户展示其信息 reply_content = ( f"你的用户ID:{user_id}\n" f"你的姓名:{first_name} {last_name}\n" f"你的Telegram用户名:{username}" ) bot.reply_to(message, reply_content) bot.polling()
核心知识点说明
message.from_user:这是一个User类型的对象,包含了发送消息用户的所有关键属性:id:用户的唯一数字ID(Telegram系统内唯一)first_name:用户的名字(必存在,不能为空)last_name:用户的姓氏(部分用户可能没有,值为None)username:用户的Telegram用户名(部分用户未设置,值为None)is_bot:标记该用户是否为机器人(对你的场景来说,这个值一定是False)
- 为什么之前的代码拿到的是Bot信息?因为
bot.get_me()的设计目的就是获取当前运行的机器人自身的资料,和触发命令的用户没有任何关联。
测试效果示例
当用户发送/info后,控制台会输出类似内容:
触发命令的用户信息:ID=123456789, 姓名=张三 无, 用户名=zhangsan_telegram
同时用户会收到Bot的回复,清晰展示自己的账号信息。
内容的提问来源于stack exchange,提问作者Sundararajan




