如何用Discord.js查询指定ID的其他机器人所在服务器数量
在Discord.js中查询其他机器人的服务器数量
首先得明确:Discord官方API不会公开其他机器人的总服务器数量,这属于隐私数据——只有机器人自己能通过client.guilds.cache.size查看自己的服务器总数。你用client.users.cache.get()找不到相关数据,是因为User对象里根本没有这个字段。
如果你想知道的是你的机器人和目标机器人共同加入的服务器数量,可以这么做:
- 先通过
client.users.fetch()获取目标机器人的用户对象(比用缓存更可靠,避免缓存里没有目标机器人数据的情况) - 遍历你的机器人所在的所有服务器,逐个检查目标机器人是否在该服务器内,统计符合条件的数量
代码示例:
async function countSharedGuilds(targetBotId) { try { // 获取目标机器人的用户信息,先验证是不是机器人账号 const targetBot = await client.users.fetch(targetBotId); if (!targetBot.bot) throw new Error("输入的ID不是机器人账号"); let sharedCount = 0; // 遍历当前机器人的所有服务器 for (const guild of client.guilds.cache.values()) { // 尝试获取目标机器人在该服务器的成员对象,失败则返回null const botMember = await guild.members.fetch(targetBotId).catch(() => null); if (botMember) sharedCount++; } return sharedCount; } catch (err) { console.error("查询出错:", err); return null; } } // 调用示例,替换成目标机器人的实际ID const targetBotId = "123456789012345678"; countSharedGuilds(targetBotId).then(count => { console.log(`和目标机器人共同存在的服务器数:${count}`); });
注意事项:
- 这个方法只能统计共同服务器数,无法获取目标机器人的总服务器数量
- 你的机器人需要在对应服务器拥有
获取成员的权限,否则无法检查目标机器人是否存在 - 如果你的机器人加入了大量服务器,遍历过程可能触发Discord的API速率限制,必要时可以加入延迟优化
内容的提问来源于stack exchange,提问作者Hyperion
相关产品推荐
相关产品推荐

