簡體   English   中英

Discord JS - 當我加入更多公會時,使用 client.guilds 的 .cache 屬性會導致錯誤嗎?

[英]Discord JS - Will using the .cache property of client.guilds cause an error further down the line when I am in more guilds?

我正在嘗試查找我所有公會的公會所有者 ID,以便在給定時間向他們發送直接消息。 我當前的實現,我已經知道所有的 guildID 並且只是遍歷它們: message.client.guilds.cache.get(guildID).ownerID這目前可以工作並且很好,但我想知道當我增加我的公會計數時它的穩健性。 我目前僅在 2 個公會上進行測試,但可能會達到 1000 個以上。

該站點上的許多較舊的教程和問題都建議不需要使用message.client.guilds.cache屬性,而只需獲取所需的屬性,例如message.client.guilds.get(desired_property)但是當我嘗試使用 go 時他們的建議我得到一個錯誤。 這個問題與我遇到的問題有類似的問題,但是當我使用message.client.cache屬性時解決了它,這解決了我以前的問題。 然后我想我找到了原因,因為這個對類似問題的回答告訴我所有用戶對象都已被緩存

當我有超過 1000 個公會時,這意味着什么? 不要擔心分片,這是我以后可以考慮的事情。

我對緩存的工作原理有一個松散的理解,但是當我進入更多公會時這會因此崩潰,因為並非所有公會都會被緩存,因此當我使用message.client.guilds.cache.get(guildID).ownerID我會只獲取那些已被緩存的公會的所有者ID,還是機器人一直在緩存的所有公會? 如果當機器人開始擁有數千個公會時這並不總是返回所有的 ownerID,因此可能不是所有的公會都被緩存,有沒有辦法可以修復它,所以它總是會全部返回?

您還可以使用.map

let list = bot.guilds.cache.map(g => g.ownerID).join('\n');
message.channel.send(list)

雖然不確定緩存錯誤,但我與用戶有過一些錯誤,但這是意料之中的。 (使用.users.fetch代替,那是 promise 所以如果你要嘗試,請確保使用await

( [ ${client.guilds.cache.map(g => g.name).join(", \n ")} ] );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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