如何用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
相关产品推荐
相关产品推荐

