【发布时间】:2019-06-04 09:11:03
【问题描述】:
我有以下代码设置,但它经常在我的服务器上找不到成员。
我该如何解决这个问题?
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()。
有人可以帮我弄清楚如何让它工作吗?还是我做错了什么?
我正在运行 node v11.6.0,并将 "discord.js": "^11.4.2" 作为依赖项。
谢谢!
【问题讨论】:
-
使用
message.guild.member()这个还是不行吗? -
@FedericoGrandi,如果我使用找不到会员:
var member = message.guild.member(user); if (member != null) { ... } -
当您尝试
message.guild.fetchMember(user.id, false)时会发生什么?也许该方法无法弄清楚如何处理完整的用户对象(即使文档说它应该可以工作) -
@T.Dirks,它适用于用户对象,用于 77/100 的第一个获取的用户。就好像机器人正在从所有成员的缓存列表中获取,而不是通过 API 进行搜索。我会注意到,如果我尝试@同一服务器上的某些人,我需要开始输入并删除几次,然后才会被建议;或者我可能需要进入管理服务器并以这种方式加载成员,然后才能找到它们。
标签: discord.js