我具有以下代码设置,但通常在服务器上找不到成员。
我该如何解决这个问题?
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块并打印许多“找不到以下对象的对象:******#****!”。消息。
我没有找回任何实际的异常块,并且为前62或788工作的代码有反应。似乎该漫游器没有缓存用户信息,即使在message.guild.fetchMember(user, boolean)
中使用false也不起作用。
但是已定义该成员的用户对象。我需要成员对象才能使用member.addRole()
。
有人可以帮我弄清楚如何使它工作吗?还是我做错了?
我正在以“ discord.js”:“ ^ 11.4.2”作为依赖项运行节点v11.6.0。
谢谢!
答案 0 :(得分:0)
我发现来自BOT.guilds.first()的行会对象具有: 成员:656, memberCount:2470
所以,如果我这样做:
BOT.guilds.first().fetchMembers().then((guild) => {
...
}
这解决了我的问题,因为fetchMembers()
返回了一个Promise<Guild>
,我可以在.then()
子句中看到该对象,并且该Guild
对象的内部提取了所有成员。
希望这可以帮助其他人!