You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动