1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Discordのコマンド実行時に「アプリケーションが応答しませんでした」が表示される場合の原因と解決方法

Posted at

DiscordのチャンネルにINTERACTIONS ENDPOINT URLを登録した自作のBotを招待し、コマンドを実行すると、処理は実行できているものの、「アプリケーションが応答しませんでした」と表示されました。

2023/10/02時点、Discord APIのバージョン10の場合です。

✅ 解決方法

コマンド実行から3秒以内にInteractionsの初回のレスポンスを行う。

🔴 原因

Interaction tokens are valid for 15 minutes and can be used to send followup messages but you must send an initial response within 3 seconds of receiving the event. If the 3 second deadline is exceeded, the token will be invalidated.

Responding to an Interaction

「DiscordのInteractionsの初回のレスポンスを3秒以内に行わないと、トークンが無効になる」という仕様を見逃していました。

Interaction tokens are valid for 15 minutes

の部分を見て、15分間は有効だと勘違いしてしまいました……

💻 エラー発生時にやっていたこと

やろうとしていた事はこんな感じです。

  • EC2に建てたゲームサーバーの起動をDiscordのコマンドで行う
  • Discordのコマンド(Interactions)のハンドリングはLambdaで行う
    • PING - PONGの対応
    • Authorizationの対応
    • サーバーコマンドのハンドリング用のLambdaを呼び出す

「アプリケーションが応答しませんでした」を表示しないようにするには、
コマンド送信 → LambdaのInitialization -> LambdaのInvocation -> Discordがレスポンスを受け取る一連の流れを3秒以内に終わらせる必要があります。 当然Lambdaのコールドスタートも含めて3秒以内に応答する必要があります。

自分の今回のケースだと、Lambdaの実行時間は平均3~6秒前後かかっていたので全然間に合っていませんでした。

今回は、サーバーコマンドのハンドリング用のLambdaを呼び出す際に、非同期呼び出しではなく同期呼び出しを行なっていたため、サーバーコマンドのハンドリング用のLambdaのレスポンスを待機してしまって、Discordへのレスポンス送信に時間がかかってしまったのが原因でした。

解決方法としては、サーバーコマンドのハンドリング用のLambdaを非同期呼び出しして、サーバーの起動処理が終わる前に一旦Discordに対してInteractionsの応答を行うとうまくいきました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?