#discord.pyのインタラクションを遅らせる方法
discord公式の以下の文
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.
インタラクションを発生させてから3秒以内に返信しろって
結構自由度奪ってると思うんですけど
それが嫌ならfollowup
を使えということらしい
制限回避の送信コード
例として、以下のコードはスラッシュコマンドで打たれたテキストをグーグルで調べて結果を返すという処理を書いています
@tree.command(name="google")
async def google_command(interaction: discord.Interaction,text:str):
##
##
# ここで送信されたテキストをもとにgoogleで検索し結果を受け取る処理を書く
##
##
result = #結果のテキスト
await interaction.response.send_message(result)
このままだと検索をしている間に3秒かかってしまうこともあるので
以下のようなエラーを返すことがあります。
NotFound: 404 Not Found (error code: 10062): Unknown interaction
そこで回避するのがfollowup
です。
@tree.command(name="google")
async def google_command(interaction: discord.Interaction,text:str):
await interaction.response.defer()
##
##
# ここで送信されたテキストをもとにgoogleで検索し結果を受け取る処理を書く
##
##
result = #結果のテキスト
await interaction.followup.send(result)
defer()
で返答を遅延させて、followup
で送信する方法です。
ただしこのfollowup
はwebhookになるので注意。
制限回避の編集コード
個人的にはこっちをよく使います。
それこそ今流行りのchatGPTを使って会話とかはこっちのほうが相性いいんじゃないかな。
@tree.command(name="reply")
async def reply_command(interaction: discord.Interaction,text:str):
message.id = #もとからあるメッセージ
await interaction.response.defer()
##
##
# chatGPTで返答を受信
##
##
result = #結果のテキスト
await interaction.followup.edit_message(message_id,content=result)