在不和谐中循环访问成员的角色时出错.js



所以我为我的discord机器人制作了一个黑名单功能,你基本上只需要放一个词和一个角色,如果有人扮演这个角色,那么。。。会发生什么事吗?还不是很确定。但当我尝试迭代成员的角色时,我会得到以下错误:

(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);
}
}

关于如何解决这个问题有什么想法吗?

我不太明白你指的是什么角色,但我想你说的是帮会角色。你可以从消息中获取公会,然后它是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();

正如您所说,您不确定要做什么,但如果它像">将用户分配到角色"命令,您可以这样做:

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);
});

有用的链接:
消息#guild|discord.js
guild#roles|discord.js
角色管理器#cache|discordjs

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

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

相关内容

  • 没有找到相关文章

最新更新