diff --git a/backend/app/core/discord/discord_bot.py b/backend/app/core/discord/discord_bot.py index d8d5add..3b64284 100644 --- a/backend/app/core/discord/discord_bot.py +++ b/backend/app/core/discord/discord_bot.py @@ -112,8 +112,11 @@ async def on_message(message: discord.Message): # (新規作成したスレッド、または元のチャンネル)に統一する。 reply_channel = await _ensure_thread(message, content) - async with reply_channel.typing(): - try: + try: + # typing() の開始(=タイピング表示のリクエスト送信)自体が権限不足で失敗しうる + # (スレッド作成には成功しても "Send Messages in Threads" が無いケースなど)ため、 + # try の外に置くと on_message ごと落ちて何の返信もされない。try の内側に入れる。 + async with reply_channel.typing(): if any(keyword in content for keyword in USELESS_TALK_KEYWORDS): redirect = await _generate_useless_talk_redirect(content) await _reply(message, reply_channel, redirect) @@ -147,9 +150,9 @@ async def on_message(message: discord.Message): if reply: record_message(reply) await _reply(message, reply_channel, reply or "(応答が空でした)") - except Exception: - logger.exception("Failed to generate reply for Discord mention") - await _reply(message, reply_channel, "⚠️ 応答の生成に失敗しました") + except Exception: + logger.exception("Failed to generate reply for Discord mention") + await _reply(message, reply_channel, "⚠️ 応答の生成に失敗しました") async def _generate_useless_talk_redirect(content: str) -> str: