11import copy
22import traceback
3+ from collections .abc import Iterable
34from sys import maxsize
45
56import astrbot .api .message_components as Comp
1920from .long_term_memory import LongTermMemory
2021
2122
23+ def _iter_message_components (event : AstrMessageEvent ):
24+ messages = getattr (getattr (event , "message_obj" , None ), "message" , None )
25+ if not isinstance (messages , Iterable ) or isinstance (messages , (str , bytes )):
26+ return ()
27+ return tuple (messages )
28+
29+
2230class Main (star .Star ):
2331 def __init__ (self , context : star .Context ) -> None :
2432 self .context = context
@@ -134,8 +142,9 @@ def ltm_enabled(self, event: AstrMessageEvent):
134142 @filter .platform_adapter_type (filter .PlatformAdapterType .ALL )
135143 async def on_message (self , event : AstrMessageEvent ):
136144 """群聊记忆增强"""
145+ message_components = _iter_message_components (event )
137146 has_image_or_plain = False
138- for comp in event . message_obj . message :
147+ for comp in message_components :
139148 if isinstance (comp , Plain ) or isinstance (comp , Image ):
140149 has_image_or_plain = True
141150 break
@@ -167,7 +176,7 @@ async def on_message(self, event: AstrMessageEvent):
167176
168177 if not session_curr_cid :
169178 logger .error (
170- "当前未处于对话状态,无法主动回复,请确保 平台设置->会话隔离(unique_session) 未开启,并使用 /switch 序号 切换或者 / new 创建一个会话。" ,
179+ "当前未处于对话状态,无法主动回复,请确保 平台设置->会话隔离(unique_session) 未开启,并使用 /new 创建一个会话。" ,
171180 )
172181 return
173182
@@ -177,6 +186,13 @@ async def on_message(self, event: AstrMessageEvent):
177186 )
178187
179188 prompt = event .message_str
189+ image_urls = []
190+ for comp in message_components :
191+ if isinstance (comp , Image ):
192+ try :
193+ image_urls .append (await comp .convert_to_file_path ())
194+ except Exception :
195+ logger .exception ("主动回复处理图片失败" )
180196
181197 if not conv :
182198 logger .error ("未找到对话,无法主动回复" )
@@ -185,6 +201,7 @@ async def on_message(self, event: AstrMessageEvent):
185201 yield event .request_llm (
186202 prompt = prompt ,
187203 session_id = event .session_id ,
204+ image_urls = image_urls ,
188205 conversation = conv ,
189206 )
190207 except BaseException as e :
0 commit comments