我有这段代码,它运行得非常好,直到达到了1024
的极限,因为成员的角色显示在addField
值中。它给了我错误,当一个成员拥有这么多的角色在公会。我想要做的是,机器人将如何发送成员拥有的前10个角色,如果更多的话,它将提供角色并继续使用<numbers> more
消息
const roles = member.roles.cache.filter(r => r.id !== message.guild.id).map(r => r).join(" ")
发布于 2020-07-27 04:15:36
@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
发布于 2020-07-30 02:52:33
因为member.roles.cache
返回一个集合,所以可以使用first() method
来提取第一个X角色。在您的示例中,您希望检索前十个角色;因此,您将使用member.roles.cache.first(10)
。这将从缓存中返回前十个角色的集合。
对于<numbers> more
部分,可以在if条件下使用member.roles.cache.size
来决定如何分割。
https://stackoverflow.com/questions/63108193
复制相似问题