Discord ゲートウェイの目的: イベント発行の失敗とキャッシュの問題の解決
最近、一部の Discord ユーザーがイベント発行とキャッシュに関する問題に直面しています。管理。具体的には、guildMemberAdd、guildMemberRemove、guildMemberUpdate などのイベントがトリガーを停止し、その結果、機能が応答しなくなります。さらに、ユーザー キャッシュが空であるか、非常に制限されていることが観察されています。さらに、ギルドメンバーを取得することを目的とした機能でタイムアウトが発生しています。
これらの問題は、Discord の最近の「特権インテント」の施行に起因している可能性があります。インテントは、Discord 上の特定のデータ ストリームにサブスクライブできるようにするメカニズムです。これらのインテントのうち 2 つ、GUILD_MEMBERS と GUILD_PRESENCES は機密性が高いため特権とみなされ、2020 年 10 月 27 日の時点でデフォルトで無効になっています。
特権インテントの影響
特権インテントを無効にすると、次のような問題が発生する可能性がありますさまざまな問題:
- メンバーとユーザーのキャッシュが空であるか、起動時に大幅に枯渇している
- Guild.memberCount が古い値を返す
- プレゼンス関連のイベントがトリガーされない
- プレゼンス データが null または未定義を返します
- ギルドメンバーがオフラインになっている
- fetchAllMembers が有効な場合にログイン中にタイムアウトが発生
- GuildMemberManager.fetch() および UserManager.fetch() メソッドからのタイムアウト
- ギルド メンバーが関係するイベントの失敗、ギルドメンバー追加、ギルドメンバー削除など、 guildMemberUpdate、guildMemberSpeaking、および guildMembersChunk
解決策
この問題を解決するには、Discord Developer を通じて特権インテントを手動で有効にする必要がありますポータル:
- Discord 開発者ポータルに移動します。
- アプリケーションを選択します。
- サイドバーの「ボット」タブに移動します。
- 「特権ゲートウェイインテント」まで下にスクロールします。
- GUILD_MEMBERS および/または GUILD_PRESENCES のボックスをオンにします。
- ボットに 75 を超えるギルドがある場合、Discord は最初にそれを確認する必要があります。指示に従ってホワイトリスト アクセスをリクエストします。
有効にしたら、discord.js モジュール設定で目的のインテントを指定する必要があります。すべてのインテントが必要ない場合は、特定のインテントを選択して有効にすることができます。
リソース
- Discord.js 公式ガイド - ゲートウェイ インテント
- Discord 開発者ドキュメント - ゲートウェイインテント
- ゲートウェイ更新 FAQ
- Discord API Github - 問題 1363 - 特権インテント
- Discord ブログ - Discord におけるボットの将来
以上がDiscord ボット イベントが失敗し、キャッシュが空になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。