首页 > 解决方案 > 如何在 Discord.js 中将一组成员角色分成十个

问题描述

我有这段代码,它工作得非常好,直到它达到它的限制,1024因为成员的角色显示在一个addField值中。当一个成员在公会中拥有这么多角色时,它给了我错误。我想要做的是机器人将如何发送成员拥有的前 10 个角色,如果超过,它将提供角色并继续发送消息<numbers> more

const roles = member.roles.cache.filter(r => r.id !== message.guild.id).map(r => r).join(" ")

标签: javascriptnode.jsdiscordbotsdiscord.js

解决方案


@fubar 提出了您可以Array#slice()用来实现这一目标的方法。它对您不起作用并返回空数组 ( []) 的原因可能是因为您正在一个少于 3 个角色的公会成员上测试您的代码。slice当其数组的长度小于其start参数时,该方法将返回一个空数组。就您而言,您2在应该提供0. 所以,正如你所说,当一个公会成员的角色少于10个时,这种现象不会发生。

您的代码似乎也有冗余。您的filter方法永远不会减少返回的数组的大小,GuildMemberRoleManager#cache因为公会的 ID 实际上永远不会匹配该公会角色之一的 ID。此外,您的map方法实际上并没有返回包含不同值的数组 - 您传入的回调函数只返回它接收到的相同值。这两个链式调用都可以安全地删除,并且您的代码的行为将保持不变。

也就是说,这是更新的代码:

const rolesToDisplay = member.roles.cache.array().slice(0, 10); //start at index 0 and end before index 10

推荐阅读