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

Telegram机器人获取群成员用户名失败的技术问询

解决方案
  • 先明确chat和from的区别:

    • update.message.chat对应的是消息所在的对话对象:私聊场景下这个对象就是发消息的用户,所以能拿到username;但在群组里,这个对象是群组本身,群组没有username(或返回None),这就是你之前的方法在群组失效的原因。
    • 发消息的用户真实信息存在update.message.from字段里,从你打印的update内容也能看到,这个字段包含了username、first_name等用户数据。
  • 解决from作为Python关键字的报错:
    由于from是Python保留关键字,不能直接用.访问属性,你可以用两种方式获取用户信息:

    1. 字典索引方式:
      # 获取用户名
      username = update.message['from']['username']
      # 获取用户名字
      first_name = update.message['from']['first_name']
      
    2. 使用getattr方法:
      user = getattr(update.message, 'from')
      username = user.username
      first_name = user.first_name
      
  • 实用示例(以python-telegram-bot库为例):
    处理消息时可以这样提取用户信息并存库:

    def handle_message(update, context):
        # 获取用户对象
        user = update.message['from']
        # 提取信息(用get避免用户未设置对应字段时报错)
        user_id = user['id']
        username = user.get('username')
        first_name = user['first_name']
        last_name = user.get('last_name')
        # 此处执行数据库存储逻辑
        print(f"用户信息:ID={user_id}, 用户名={username}, 姓名={first_name} {last_name}")
    

注意:部分用户可能未设置username,建议用get方法获取字段,避免触发KeyError。

内容的提问来源于stack exchange,提问作者Yogendran Prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:39