トラブルシューティング¶

bostie は、検出できる間違いごとに警告をログに出力します。このページでは、それらを目に見える症状ごとに、探すべきログ行と対処法とあわせて一覧にしています。
コマンドに「アプリケーションが応答しませんでした」と表示される¶
| ログ行 | 原因 | 対処法 |
|---|---|---|
nothing handles interaction ... (command 'name') |
実行中の Bot が定義していないコマンドが Discord に残っています。auto_sync=False で名前を変えた後によく起こります。または、コマンドが別のプロセスにあります |
コマンドを同期します(コマンドの登録) |
nothing handles interaction ... (custom_id '...') |
カスタム ID に一致する on_component または on_modal のテンプレートがありません |
送っている ID とテンプレートを照らし合わせます。ID は route.id(...) で組み立てます |
... returned without answering |
ハンドラーが respond、defer、modal のいずれも呼ばずに終了しました |
早期 return を含め、すべての経路で応答します |
... returned after deferring without answering |
遅延応答した後に一度も応答しなかったため、トークンが失効するまで「考え中…」が表示されたままになります | 時間のかかる処理の後に respond を呼びます |
interaction ... reached its handler ... s after it was received; something is blocking the event loop |
ハンドラーやリスナー内のブロッキングなコードが、Discord の 3 秒の期限を過ぎてもイベントループを占有していました | 処理を asyncio.to_thread に移すか、auto_defer を小さくします |
interaction ... was replayed ... s after it was created; its token is dead |
インタラクションが再開したセッションのリプレイで届いたため、応答するには遅すぎました | 対処は不要です。ユーザーはもう一度実行できます |
ハンドラー内で処理されなかった例外はトレースバックとともにログに出力され、ユーザーには「Something went wrong.」と表示されます。もっと適切な応答を返すにはエラーフックを追加します。
イベントが届かない¶
... listens to EVENT, which needs the INTENT intent; add it to Bot(intents=...):Bot がそのインテントを要求していません。インテントを追加し、特権インテントの場合は Developer Portal でも有効にします。start()がPrivilegedIntentsRequiredを送出する:ポータルで許可されていない特権インテントを Bot が要求しました。Bot → Privileged Gateway Intents で有効にするか、intentsから外します。- サーバー内で
message.contentが空になる:MESSAGE_CONTENTインテントがありません。 EVENT has an unexpected shape (...); typed listeners skip it:イベントクラスに合わないペイロードを Discord が送ってきました。このログはイベント名ごとに 1 回だけ出力されます。RawEventのリスナーには引き続き届きます。このログ行をぜひ報告してください。- 更新イベントで
oldがNoneになる:キャッシュにそのオブジェクトがありませんでした。キャッシュが保持するものはキャッシュを参照してください。
ゲートウェイ¶
shard N paused reading: ... bytes of events are waiting because the event loop is not keeping up:何かがイベントループをブロックしています。バックプレッシャーを参照してください。close code N (...) means Discord refused what bostie sent; this is likely a bostie bug, please report it:コード 4001、4002、4005、4008 は、bostie が送ったものを Discord が拒否したことを意味します。the members of guild N stopped arriving; the cache lacks some:キャッシュのためのメンバー要求が、チャンクごとの 30 秒を超えてタイムアウトしました。start()がInvalidTokenを送出する:トークンが間違っているか、リセットされています。Bot ページからもう一度コピーしてください。
REST¶
N invalid requests (401, 403, 429) in the last 10 minutes; Discord bans the IP at 10 000:Bot が、Discord に拒否されるリクエストを送り続けています。原因は多くの場合、権限の不足か、無効になったウェブフックです。失敗している呼び出しは、それが送出する例外から特定してください。- リクエストが Discord に届かないまま
RateLimitedが送出される:そのルートの制限がmax_rate_limit_waitより長く続いています。HTTPSettingsでこの値を大きくするか、後で再試行してください。
応答¶
ephemeral=... is ignored because the message being edited is ...:一度送信したメッセージを、エフェメラルと公開の間で切り替えることはできません。Discord allows 5 follow-ups to an interaction of an app installed only to the user:ユーザーにのみインストールされたアプリでは、6 回目のフォローアップが失敗します。the error hook ... left interaction ... unanswered; bostie answered 'Something went wrong.':フックが応答するようにしてください。
ボイス¶
nobody hears the bot in guild N: it is server muted、またはit is suppressed on this stage; use vc.stage('request'):モデレーターが Bot をミュートしたか、Bot がステージのオーディエンスになっています。a moderator deafened the bot in guild N, so Discord sends it no audio:スピーカーミュートが解除されるまで、レシーバーには何も届きません。- 理由が
TIMEOUTのVoiceConnectError:Discord がtimeout秒以内に参加に応答しませんでした。チャンネルが満員か、Bot に「接続」の権限がない可能性があります。 MissingIntent: voice needs Intents.GUILD_VOICE_STATES:ボイスにはこのインテントが必要です。Intents.DEFAULTには含まれています。
バグの報告¶
python -m bostie は報告に含めるべきバージョンを表示し、ボイスの問題の場合は bostie.voice.versions() で libopus と DAVE のバージョンも加えられます。ロギングにあるとおり、Bot を起動する前に該当するロガーを DEBUG に設定し、問題の前後のログ行を、トークンを取り除いたうえで添えてください。