@@ -25,8 +25,12 @@ async def _run(self) -> None:
2525 await self ._event .wait ()
2626 prompt = f"channel: ${ self .channel .output_channel } \n " + "\n " .join (self ._prompts )
2727 self ._prompts .clear ()
28- self ._last_received_at = None
2928 self ._running_task = None
29+ if (
30+ self ._last_received_at is not None
31+ and self ._loop .time () - self ._last_received_at > self .message_delay_seconds
32+ ):
33+ self ._last_received_at = None
3034 try :
3135 result = await self .channel .run_prompt (self .session_id , prompt )
3236 await self .channel .process_output (self .session_id , result )
@@ -46,15 +50,26 @@ async def process_message(self, message: Any) -> None:
4650 if not is_mentioned and self ._last_received_at is None :
4751 return
4852 self ._prompts .append (prompt )
49- if is_mentioned :
53+ if prompt .startswith ("," ):
54+ logger .info ("session.receive.command session_id={} message={}" , self .session_id , prompt )
55+ try :
56+ result = await self .channel .run_prompt (self .session_id , prompt )
57+ await self .channel .process_output (self .session_id , result )
58+ except Exception :
59+ logger .exception ("session.run.error session_id={}" , self .session_id )
60+ elif is_mentioned :
5061 # wait at most 1 second to reply to mentioned messages.
5162 self ._last_received_at = now
63+ logger .info ("session.receive.mentioned session_id={} message={}" , self .session_id , prompt )
5264 self .reset_timer (self .debounce_seconds )
5365 if self ._running_task is None :
5466 self ._running_task = asyncio .create_task (self ._run ())
5567 return await self ._running_task
5668 elif self ._last_received_at is not None and self ._running_task is None :
5769 # Otherwise if bot is mentioned before, we will keep reading messages for at most 30 seconds.
70+ logger .info ("session.receive followup session_id={} message={}" , self .session_id , prompt )
5871 self .reset_timer (self .message_delay_seconds )
5972 self ._running_task = asyncio .create_task (self ._run ())
6073 return await self ._running_task
74+ else :
75+ logger .info ("session.receive ignored session_id={} message={}" , self .session_id , prompt )
0 commit comments