Discord.py:如何通过用户名获取无共同公会用户的ID以发私信
关于Discord机器人通过用户名+判别器获取无共同公会用户ID的问题
核心结论
无法仅通过用户名+判别器获取与机器人无共同公会用户的ID,这是Discord API的权限限制导致的。
原因说明
Discord的隐私机制和API设计限制了机器人的查询范围:机器人只能获取自己所在公会内的用户信息,或是已经与机器人有过私信互动的用户信息。用户名+判别器的组合虽然理论上唯一,但Discord不支持通过这个组合跨公会查询用户ID,以此保护用户隐私。
示例代码纠正
你提供的代码存在两处问题:
fetch_user方法的参数需要是用户ID(整数),而非用户名+判别器字符串;get_user_info和send_message在新版discord.py中已被弃用。
如果已有用户ID,正确的代码写法应为:
user = await client.fetch_user(123456789012345678) # 替换为实际用户ID await user.send("message")
替代解决方案
- 让目标用户先主动给机器人发送一条私信,此时机器人就能获取到该用户的ID并存储,后续即可主动发起私信;
- 若目标用户在某个公开服务器,可让机器人加入该服务器,之后就能获取到用户ID。
内容的提问来源于stack exchange,提问作者aravinds.arv
相关产品推荐
相关产品推荐

