Skip to content

Commit 29b76db

Browse files
committed
🐛 fix message_provider
1 parent 9a7f549 commit 29b76db

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

src/nonebot_plugin_alconna/extension.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)