我已经使用Discord.js编写了一个discord bot,它用来获取discord服务器的所有用户(我仅在一个discord服务器中拥有该bot),但是现在它仅获得59个成员。我的服务器中有300多个不和谐的用户。
var Discord = require('discord.js');
var bot = new Discord.Client();
function getUsers() {
let users = bot.users.array();
for (let i = 0; i < users.length; i++) {
let username = `${users[i].username}#${users[i].discriminator}`;
console.log(`[${i}] ${username}`);
}
}
答案 0 :(得分:3)
这里有一个不和谐方面的设置可能与此相关。
<块引用>如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图接收成员事件和成员列表。
转到 https://discord.com/developers/ 并选择您的 Discord 应用程序,转到机器人设置,然后在“特权网关意图”下启用“服务器成员意图”。
来源:https://github.com/discordjs/discord.js/issues/3774#issuecomment-717824144
答案 1 :(得分:2)
您必须对机器人所在的每个不和谐服务器使用方法.fetchMembers()
。
尝试使用以下代码:
function getUsers() {
let guilds = bot.guilds.array();
for (let i = 0; i < guilds.length; i++) {
bot.guilds.get(guilds[i].id).fetchMembers().then(r => {
r.members.array().forEach(r => {
let username = `${r.user.username}#${r.user.discriminator}`;
console.log(`${username}`);
});
});
}
}
答案 2 :(得分:0)
在这里晚点参加聚会,但是<Client>.users
仅返回此时的缓存用户。例如,Discord.js在成员发送消息或获取特定成员时会对其进行缓存。您将必须使用<Guild>.fetchMembers()
浏览公会的每个成员,该公会返回每个成员的member
对象。
答案 3 :(得分:0)
如果您使用discord.js v12,则应该为guild.members.fetch()
,它将缓存所有成员。
答案 4 :(得分:0)
var usersCount = client.guilds.cache.reduce((a, g) => a + g.memberCount, 0)
这对我有用...