@@ -40,6 +40,7 @@ class Extension(metaclass=ABCMeta):
4040
4141 def __init_subclass__ (cls , ** kwargs ):
4242 cls ._overrides = {
43+ "message_provider" : cls .message_provider != Extension .message_provider ,
4344 "output_converter" : cls .output_converter != Extension .output_converter ,
4445 "send_wrapper" : cls .send_wrapper != Extension .send_wrapper ,
4546 "receive_wrapper" : cls .receive_wrapper != Extension .receive_wrapper ,
@@ -77,18 +78,7 @@ async def message_provider(
7778 self , event : Event , state : T_State , bot : Bot , use_origin : bool = False
7879 ) -> Message | UniMessage | None :
7980 """提供消息对象以便 Alconna 进行处理。"""
80- if event .get_type () != "message" :
81- return None
82- try :
83- msg : Message = event .get_message ()
84- except (NotImplementedError , ValueError ):
85- return None
86- if use_origin :
87- try :
88- msg : Message = getattr (event , "original_message" , msg ) # type: ignore
89- except (NotImplementedError , ValueError ):
90- return None
91- return msg
81+ return None
9282
9383 async def receive_wrapper (self , bot : Bot , event : Event , command : Alconna , receive : TM ) -> TM :
9484 """接收消息后的钩子函数。"""
@@ -216,17 +206,31 @@ async def output_converter(self, output_type: OutputType, content: str) -> UniMe
216206 async def message_provider (
217207 self , event : Event , state : T_State , bot : Bot , use_origin : bool = False
218208 ) -> Message | UniMessage | None :
209+ if event .get_type () != "message" :
210+ msg = None
211+ else :
212+ try :
213+ msg = event .get_message ()
214+ except (NotImplementedError , ValueError ):
215+ msg = None
216+ if use_origin :
217+ try :
218+ msg = getattr (event , "original_message" , msg ) # type: ignore
219+ except (NotImplementedError , ValueError ):
220+ pass
219221 exc = None
220222 for ext in self .context :
223+ if not ext ._overrides ["message_provider" ]:
224+ continue
221225 try :
222- if (msg := await ext .message_provider (event , state , bot , use_origin )) is not None :
223- return msg
226+ if (msg1 := await ext .message_provider (event , state , bot , use_origin )) is not None :
227+ return msg1
224228 except Exception as e :
225229 exc = e
226230 if exc is not None :
227231 raise exc
228232
229- return None
233+ return msg
230234
231235 async def receive_wrapper (self , bot : Bot , event : Event , command : Alconna , receive : TM ) -> TM :
232236 res = receive
0 commit comments