以下是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.MyMessage
,this.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;