所以您的機器人遇到了速率限制的錯誤訊息。
API 速率限制
如果超越了速率限制 (目前每秒最多50個申請),API 將會返回並跳出 HTTP 429 的響應狀態碼。目前,如果每10分鐘寄出10,000個申請,申請將會無效。但是,如果您的機器人暫時被 API 禁止使用 CloudFlare 的話,這看起來不像是一個常見的全球性速率限制問題,並且很可能是一個我們無法妥善處理的錯誤峰值。
首先,我們想在此聲明,在極少數情況下,我們可能會提高針對應用程式的全球速率限制。但好消息是,我們有多種能用於替代的解決方式,在開發者開發他們的應用程式時,我們鼓勵他們能查看這些替代解決方式。
並且在此我想特別提到,互動端點將不受速率限制的影響,因此,將功能性遷移至應用程式命令或許可以作為一種解決方案。強烈建議您詳閱我們在這裡所提供的參考文件,或是您選擇的資料庫中的參考文件。
網關速率限制
如需從 Discord 收發數據,首先您的應用程式必須連上一個 websocket 。尤其是在 Discord 上逐漸增長並擴展時,分片通常會是應用程式能採取的一個好方法。這是一種可靠但不完全的作業方式.. 但在我們的 API 速率限制範圍內。分片將開啟多重的 websockets ,因此將允許在這些連線中的數據互換,而不是重載同一個數據。
shard_id = (guild_id >> 22) % num_shards
來自社群/伺服器中的流量將會被誘導至分片(開啟的 websocket) 內,而這些申請將會分別平行執行,因此能保持低於全球速率限制下。 您可以把分片想像成一個能將機器人拆成多個分身的功能。這完全是由用戶所掌控,並且依照您所選擇的資料庫將能讓此過程更為簡化!
關於大型機器人分片與全球速率限制的提升,我們僅能為在 150,000 個或以上的伺服器運行中的機器人提供這些服務。您可以在以下這篇文件中了解這些申請是如何運行的:https://discord.com/developers/docs/topics/gateway#sharding-for-very-large-bots
在這篇文章中,您可以閱讀該如何微調或配置分片。