[英]How to slice an array of member roles to ten in Discord.js
我有這段代碼,它工作得非常好,直到它達到1024
的限制,因為成員的角色顯示在addField
值中。 當一個成員在公會中擁有這么多角色時,它給了我錯誤。 我想要做的是機器人將如何發送成員擁有的前 10 個角色,如果超過了,它將提供角色並繼續使用<numbers> more
的消息
const roles = member.roles.cache.filter(r => r.id.== message.guild.id).map(r => r).join(" ")
@fubar 提出您可以使用Array#slice()
來實現這一點。 它對您不起作用並返回空數組 ( []
) 的原因可能是因為您正在一個少於 3 個角色的公會成員上測試您的代碼。 當其數組的長度小於其start
參數時, slice
方法將返回一個空數組。 就您而言,您應該提供2
時提供了0
。 所以,正如你所說,當一個公會成員的角色少於10個時,這種現象不會發生。
您的代碼似乎也有冗余。 您的filter
方法永遠不會減少GuildMemberRoleManager#cache
返回的數組的大小,因為公會的 ID 實際上永遠不會匹配該公會角色之一的 ID。 此外,您的map
方法實際上並不返回包含不同值的數組 - 您傳入的回調 function 只返回它收到的相同值。 這兩個鏈式調用都可以安全地刪除,並且您的代碼的行為將保持不變。
也就是說,這是更新的代碼:
const rolesToDisplay = member.roles.cache.array().slice(0, 10); //start at index 0 and end before index 10
由於member.roles.cache
返回一個 Collection,您可以使用first() method
拉取前 X 個角色。 在您的情況下,您想檢索前十個角色; 所以,你會使用member.roles.cache.first(10)
。 這將返回緩存中前十個角色的集合。
對於<numbers> more
部分,您可以在 if 條件中使用member.roles.cache.size
來決定如何拆分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.