首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Discord.js中将成员角色的数组划分为10个

如何在Discord.js中将成员角色的数组划分为10个
EN

Stack Overflow用户
提问于 2020-07-27 03:14:10
回答 2查看 825关注 0票数 0

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

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

EN

回答 2

Stack Overflow用户

发布于 2020-07-27 04:15:36

@fubar已经指出,您可以使用Array#slice()来实现这一点。它不适用于您并返回空数组([])的原因可能是因为您正在测试不到3个角色的行会成员上的代码。当slice方法的数组长度小于其start参数时,它将返回一个空数组。在本应该提供2的情况下,您提供了0。因此,这一现象并不会发生,确切地说,当一个公会成员有少于10个角色,如你所说。

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

尽管如此,下面是更新的代码:

代码语言:javascript
运行
复制
const rolesToDisplay = member.roles.cache.array().slice(0, 10); //start at index 0 and end before index 10
票数 1
EN

Stack Overflow用户

发布于 2020-07-30 02:52:33

因为member.roles.cache返回一个集合,所以可以使用first() method来提取第一个X角色。在您的示例中,您希望检索前十个角色;因此,您将使用member.roles.cache.first(10)。这将从缓存中返回前十个角色的集合。

对于<numbers> more部分,可以在if条件下使用member.roles.cache.size来决定如何分割。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63108193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档