遍历discord.js中的成员角色时出错

时间:2020-09-04 21:13:08

标签: discord.js

因此,我正在为不和谐的机器人设置黑名单功能,您基本上只是在其中输入一个单词和一个角色,如果有人担任该角色,那么...会发生什么?还不是很确定。但是当我尝试遍历成员的角色时,出现此错误:

(node:21803) UnhandledPromiseRejectionWarning: TypeError: message.member.roles is not iterable

这是我的代码:

for (const word of message.content.split(" ")) {
        for (const role of message.member.roles) {
            console.log(role.name);
        }
    }

关于如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:1)

我不确定您指的是什么角色,但我想您是在谈论公会角色。您可以从消息中获取公会,然后是RoleManager,因此可以映射其缓存以获取其中的所有角色。这是您的操作方式:

const roles = message.guild.roles.cache.map(role => role);

与Javascript中的任何其他数组一样,您可以使用forEach循环遍历它。

// This log every role in the Guild the message was sent
roles.forEach(role => {
  console.log(role);
});

对于提到的用户,您可以通过MessageMentions对象获取它。这样:

// In case you want the User Object
const user = message.mentions.users.first();
// In case you want the GuildMember object (most likely)
const member = message.mentions.members.first();

有了这一点,我认为您可以解决您要达到的目标。无论如何,如果您正在谈论消息中提到的角色,则可以像用户一样(从MessageMentions对象中)获得它。

const role = message.mentions.roles.first();

正如您所说,您不确定要执行的操作,但是如果这就像一个'将用户分配给角色'命令,则可以执行以下操作:< / p>

const member = message.mentions.members.first();
const role = message.mentions.roles.first();

member.roles.add(role);

// !command @user @role - adds the user to the role

或者,如果这是整个时间,您只是尝试遍历该成员的角色。它的工作原理与第一个示例差不多。你去了

// In case you want the mentioned user
const member = message.mentions.members.first();
// In case you want the message author user
const member = message.member;

// Map the User Roles
const roles = member.roles.cache.map(role => role);

// Iterate though it =)
roles.forEach(role => {
  console.log(role);
});

有用的链接:
Message#guild | discord.js
Guild#roles | discord.js
RoleManager#cache | discord.js

答案 1 :(得分:0)

如果您使用的是v12+,则必须通过GuildMemberRoleManager属性传递cache

for (const role of message.member.roles.cache) {
   // ...