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

Discord.py调用client.get_user返回None故障排查问询

Discord机器人get_user返回None问题排查与解决方法

1. 修复Bot初始化逻辑错误

你代码中两次对client赋值,第二次创建commands.Bot实例时没有传入你配置好的intents参数,导致你在开发者门户开启的Server Members Intent并未实际生效,这是核心问题之一。正确初始化代码如下:

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
# 直接给commands.Bot传入配置好的intents,无需重复创建discord.Client实例
client = commands.Bot(command_prefix = "e.", intents=intents)

2. 修正用户参数解析逻辑

当前你命令定义的参数user_id接收的是@用户提及格式的字符串(类似<@!123456789>),不是纯数字ID,而get_user仅支持传入整数类型的纯用户ID,因此会返回None,可选择以下任意一种方案修正:

  • 方案一:使用discord.py自带的类型转换器,自动解析提及/ID为用户对象,无需手动调用获取接口:
@client.command()
async def duel(ctx, user: discord.User):
    # 直接拿到解析完成的用户对象
    print(user.id)
    print(user.name)
  • 方案二:手动解析提及格式的ID,同时兼容缓存缺失场景:
@client.command()
async def duel(ctx, user_id):
    # 提取提及字符串中的纯数字ID
    if user_id.startswith("<@") and user_id.endswith(">"):
        user_id = user_id.strip("<@!>")
    # 转换为int类型,get_user/fetch_user仅支持整数ID
    user_id = int(user_id)
    # 优先从本地缓存取用户,缓存缺失时调用API拉取,避免返回None
    user = client.get_user(user_id) or await client.fetch_user(user_id)
    print(user)

3. 确认配置生效

  • 重启机器人进程,确保开发者门户开启的Intent配置生效
  • 若你的机器人已加入超过100个服务器,需要先向Discord申请Intent权限验证,才能正常使用成员相关接口

额外注意

client.run()的参数需要替换为你自己的Bot Token,不要将明文Token提交到公开代码仓库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:00:04