fix(tasks): replace fire-and-forget asyncio.create_task with create_tracked_task
Add utils/task_tracker.py with create_tracked_task() that wraps background tasks with error logging, cancellation handling, and reference tracking. Replace all 17 fire-and-forget asyncio.create_task() calls across 7 files: - bot/bot.py (5 interjection checks) - bot/utils/autonomous.py (2 check-and-act/react tasks) - bot/utils/bipolar_mode.py (3 argument tasks) - bot/commands/uno.py (1 game loop task) - bot/utils/voice_receiver.py (3 STT/interruption callbacks) - bot/utils/persona_dialogue.py (4 dialogue turn/interjection tasks) Previously-tracked tasks (voice_audio.py, voice_manager.py) were left as-is since they already store task references for cancellation. Closes #1
This commit is contained in:
@@ -12,6 +12,7 @@ import asyncio
|
||||
import discord
|
||||
import globals
|
||||
from utils.logger import get_logger
|
||||
from utils.task_tracker import create_tracked_task
|
||||
|
||||
logger = get_logger('persona')
|
||||
|
||||
@@ -1113,7 +1114,7 @@ async def maybe_trigger_argument(channel: discord.TextChannel, client, context:
|
||||
|
||||
if should_trigger_argument():
|
||||
# Run argument in background
|
||||
asyncio.create_task(run_argument(channel, client, context))
|
||||
create_tracked_task(run_argument(channel, client, context), task_name="bipolar_argument")
|
||||
return True
|
||||
|
||||
return False
|
||||
@@ -1136,7 +1137,7 @@ async def force_trigger_argument(channel: discord.TextChannel, client, context:
|
||||
logger.warning("Argument already in progress in this channel")
|
||||
return False
|
||||
|
||||
asyncio.create_task(run_argument(channel, client, context, starting_message))
|
||||
create_tracked_task(run_argument(channel, client, context, starting_message), task_name="bipolar_argument_forced")
|
||||
return True
|
||||
|
||||
|
||||
@@ -1174,5 +1175,5 @@ async def force_trigger_argument_from_message_id(channel_id: int, message_id: in
|
||||
return False, f"Failed to fetch message: {str(e)}"
|
||||
|
||||
# Trigger the argument with this message as starting point
|
||||
asyncio.create_task(run_argument(channel, client, context, message))
|
||||
create_tracked_task(run_argument(channel, client, context, message), task_name="bipolar_argument_from_msg")
|
||||
return True, None
|
||||
|
||||
Reference in New Issue
Block a user