簡體   English   中英

如何在 Discord.js 中將成員角色數組切片為十

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM