Discord.js - 从 Reaction.users.fetch().each((user) => {...}) 继续循环下一个用户;



以下是client.on('ready', async() => {...});:下的代码片段

this.MyServer = await client.guilds.fetch('MyServer ID here').catch(error => { console.log(error) });
this.MyRole = await this.Server.roles.cache.find((role) => role.name == `MyRole name here`);
this.MyChannel = await client.channels.fetch('MyChannel ID here').catch(error => { console.log(error) });
this.MyMessage = await this.RoleChannel.messages.fetch('MyMessage ID here').catch(error => { console.log(error) });
this.MyEmojiReaction = await this.MyMessage.reactions.cache.get('MyEmoji ID here');
this.ReactingUsers = await this.MyEmojiReaction.users.fetch();
this.ReactingUsers.each(async (user) => {
if (!this.MyServer.members.cache.get(user.id)) return;
if (!user.bot) {
try {
const member = await this.MyMessage.guild.members.fetch(user.id);
member.roles.add(this.MyRole);
} catch (error) {
console.log(error);
return;
}
}
});

当bot启动时,它应该检查反应,消息中的this.MyEmojiReaction,通道中的this.MyMessagethis.MyChannel,并将存储在this.ReactingUsers中的反应用户添加到角色this.MyRole中。除了一个问题外,它基本上运行良好。

如果this.ReactingMembers中的用户不在this.MyServer中,this.ReactingMembers.each(async (user) => {..}中的第一行if (!this.MyServer.members.cache.get(user.id)) return;负责从函数返回,并且它确实存在,但当它返回时,该函数永远不会为this.ReactingMembers中的下一个用户执行,可能是因为它从整个循环返回。我想为下一个用户继续循环。

如果我理解正确,您应该使用continue

它将转到下一次迭代,以及数组中的下一个User。

在您的情况下,而不是这样:

if (!this.MyServer.members.cache.get(user.id)) return;

你应该这样做:

if (!this.MyServer.members.cache.has(user.id))  continue;

最新更新