如何通过用户对象检索公会的所有成员?
How to retrieve all members of a guild by user object?
我有以下代码设置,但它经常在我的服务器上找不到成员。
我该如何解决这个问题?
BOT.on('message', function(message) {
if (!message.content.startsWith(prefix)) return;
const args = message.content.slice(prefix.length).split(' ');
const command = args.shift().toLowerCase();
const chan = message.channel;
if (command == "grabreacts" && chan.name == "the-purge") {
var role = message.guild.roles.find(role => role.name === "2019 Purge Survivor");
if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
//console.log(role);
chan.fetchMessage(args)
.then(function(value) {
const react = value.reactions.filter(r => r.emoji == "").first();
var reacts = react.count;
react.fetchUsers()
.then(function(users) {
var fetchedMemebers = users.size;
users.map(async user => {
console.log(user.tag);
message.guild.fetchMember(user, false)
.then((memeber) => {
member.addRole(role)
.then((mem) => {
react.remove(user)
.catch((err) => console.log("Cannot remove user: " + user.tag + ". ex: " + ex + "!"));
})
.catch(ex => {
console.log(ex);
});
})
.catch((err) => {
console.log("Cannot find member object for: " + user.tag + "!");
});
});
var assignedusers = role.members.size;
message.reply("Reacts found: " + reacts + "; users fetched: " + fetchedMemebers + "; roles assigned: " + assignedusers);
})
.catch(err => message.reply("Cannot fetch users for react: '" + reacts + "', err: " + err + "!"));
})
.catch(err => message.reply("Cannot fetch message: '" + args + "', err: " + err + "!"));
}
});
它工作正常,直到 message.guild.fetchMember(user, false)
,我掉进了 catch 块并打印了许多 "Cannot find member object for: ******#****!" 消息。
我没有取回任何实际的异常块,并且代码适用于前 62 或 788 个反应。似乎如果机器人没有缓存用户信息,即使在 message.guild.fetchMember(user, boolean)
中使用 false 也不起作用。
然而,该成员的用户对象已定义。我需要成员对象才能使用 member.addRole()
.
有人可以帮我弄清楚如何让它工作吗?或者我做错了什么?
我是 运行 节点 v11.6.0,"discord.js": "^11.4.2" 作为依赖项。
谢谢!
我发现来自 BOT.guilds.first() 的公会对象有:
成员:656,
成员数:2470
所以,如果我这样做:
BOT.guilds.first().fetchMembers().then((guild) => {
...
}
这解决了我的问题,因为我可以在 .then()
子句中看到 fetchMembers()
returns 一个 Promise<Guild>
,并且 Guild
对象具有所有成员都在其中获取。
希望这对其他人有所帮助!
我有以下代码设置,但它经常在我的服务器上找不到成员。
我该如何解决这个问题?
BOT.on('message', function(message) {
if (!message.content.startsWith(prefix)) return;
const args = message.content.slice(prefix.length).split(' ');
const command = args.shift().toLowerCase();
const chan = message.channel;
if (command == "grabreacts" && chan.name == "the-purge") {
var role = message.guild.roles.find(role => role.name === "2019 Purge Survivor");
if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
//console.log(role);
chan.fetchMessage(args)
.then(function(value) {
const react = value.reactions.filter(r => r.emoji == "").first();
var reacts = react.count;
react.fetchUsers()
.then(function(users) {
var fetchedMemebers = users.size;
users.map(async user => {
console.log(user.tag);
message.guild.fetchMember(user, false)
.then((memeber) => {
member.addRole(role)
.then((mem) => {
react.remove(user)
.catch((err) => console.log("Cannot remove user: " + user.tag + ". ex: " + ex + "!"));
})
.catch(ex => {
console.log(ex);
});
})
.catch((err) => {
console.log("Cannot find member object for: " + user.tag + "!");
});
});
var assignedusers = role.members.size;
message.reply("Reacts found: " + reacts + "; users fetched: " + fetchedMemebers + "; roles assigned: " + assignedusers);
})
.catch(err => message.reply("Cannot fetch users for react: '" + reacts + "', err: " + err + "!"));
})
.catch(err => message.reply("Cannot fetch message: '" + args + "', err: " + err + "!"));
}
});
它工作正常,直到 message.guild.fetchMember(user, false)
,我掉进了 catch 块并打印了许多 "Cannot find member object for: ******#****!" 消息。
我没有取回任何实际的异常块,并且代码适用于前 62 或 788 个反应。似乎如果机器人没有缓存用户信息,即使在 message.guild.fetchMember(user, boolean)
中使用 false 也不起作用。
然而,该成员的用户对象已定义。我需要成员对象才能使用 member.addRole()
.
有人可以帮我弄清楚如何让它工作吗?或者我做错了什么?
我是 运行 节点 v11.6.0,"discord.js": "^11.4.2" 作为依赖项。
谢谢!
我发现来自 BOT.guilds.first() 的公会对象有: 成员:656, 成员数:2470
所以,如果我这样做:
BOT.guilds.first().fetchMembers().then((guild) => {
...
}
这解决了我的问题,因为我可以在 .then()
子句中看到 fetchMembers()
returns 一个 Promise<Guild>
,并且 Guild
对象具有所有成员都在其中获取。
希望这对其他人有所帮助!