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

如何用Python的Discord机器人私信指定用户?解决get_user返回NoneType问题

解决Discord机器人client.get_user返回None的问题
  • ID格式错误:client.get_user()要求传入整数类型的用户ID,不能是字符串。如果你的代码里传的是带引号的'user id',要去掉引号转成整数,比如user = client.get_user(123456789)。

  • 用户不在机器人缓存中:get_user()仅从机器人本地缓存读取用户数据,如果目标用户和机器人没有共同服务器,或者机器人刚启动还未加载到该用户缓存,就会返回None。这种情况改用异步方法await client.fetch_user(user_id),它会直接调用Discord API拉取用户信息,无需依赖本地缓存,但必须在异步函数内使用await关键字。

  • 更便捷的提及用户处理:如果是要给命令中提及的用户发消息,直接在命令参数里声明discord.Member类型,discord.py会自动把提及的用户解析成Member对象,无需手动处理ID:

    @client.command()
    async def send_dm(ctx, member: discord.Member):
        await member.send("这是给你的私信内容")
        await ctx.send("消息已成功发送")
    

附完整的容错示例(结合缓存和API获取):

@client.command()
async def dm(ctx, user_id: int):
    try:
        # 优先从缓存取,缓存没有则调用API
        user = client.get_user(user_id) or await client.fetch_user(user_id)
        await user.send("私信测试内容")
        await ctx.send("消息已发送")
    except discord.NotFound:
        await ctx.send("不存在该用户")
    except discord.Forbidden:
        await ctx.send("无法发送私信,可能对方关闭了私信或机器人权限不足")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:35