如何在Discord.js中用用户标识而非ID强制获取用户?
问题解答
结论:不可行,你的代码调用本身不符合Discord API要求,且受限于平台机制无法实现跨服务器通过用户名获取用户信息。
- 首先,
client.users.fetch()方法的第一个参数仅接受用户ID(Snowflake格式字符串),不支持直接传入用户名。你传入用户名的调用方式本身就是错误的,无论设置force: true还是cache: true都无法生效,会直接抛出参数错误或返回无效结果。 - 其次,Discord的用户名(包括用户昵称)并非全局唯一,即使加上用户标签(#XXXX),API也没有提供通过“用户名+标签”直接获取跨服务器用户的端点。只有用户ID是全局唯一且不可变的标识,Discord API仅支持通过ID直接获取用户信息。
- 另外,受限于Discord的隐私机制,机器人无法获取与自己无交互(不在同一服务器、未发过私信)的用户信息,哪怕知道用户名也不行——这和哈希机制无关,而是API权限和隐私设计的限制。
替代方案
如果需要通过用户名查找用户,只能遍历机器人所在的所有服务器,在每个服务器的成员列表中匹配“用户名+标签”,但这种方式效率极低,且无法找到不在任何机器人所在服务器的用户。
内容的提问来源于stack exchange,提问作者A18
相关产品推荐
相关产品推荐

