Skip to content

Commit 45f29ad

Browse files
committed
🐛 version 0.56.1
fix use_origin
1 parent 50a0ea9 commit 45f29ad

File tree

6 files changed

+49
-12
lines changed

6 files changed

+49
-12
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies = [
1414
"nonebot-plugin-waiter>=0.6.0",
1515
]
1616
dynamic = ["version"]
17-
requires-python = ">=3.11"
17+
requires-python = ">=3.9"
1818
readme = "README.md"
1919
license = {text = "MIT"}
2020
keywords = [

src/nonebot_plugin_alconna/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@
137137
from .uniseg import SupportAdapterModule as SupportAdapterModule
138138
from .extension import add_global_extension as add_global_extension
139139

140-
__version__ = "0.56.0"
140+
__version__ = "0.56.1"
141141
__supported_adapters__ = set(m.value for m in SupportAdapterModule.__members__.values()) # noqa: C401
142142
__plugin_meta__ = PluginMetadata(
143143
name="Alconna 插件",

src/nonebot_plugin_alconna/extension.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ def id(self) -> str:
126126
_callbacks = set()
127127

128128
unimsg_cache: LRU[str, UniMessage] = LRU(16)
129+
unimsg_origin_cache: LRU[str, UniMessage] = LRU(16)
129130

130131

131132
class ExtensionExecutor:
@@ -209,16 +210,20 @@ async def message_provider(
209210
self, event: Event, state: T_State, bot: Bot, use_origin: bool = False
210211
) -> UniMessage | None:
211212
if event.get_type().startswith("message"):
212-
msg = event.get_message()
213-
if use_origin:
214-
msg = getattr(event, "original_message", None) or msg # type: ignore
215213
msg_id = UniMessage.get_message_id(event, bot)
214+
if use_origin and (uni_msg := unimsg_origin_cache.get(msg_id)) is not None:
215+
return uni_msg
216216
if (uni_msg := unimsg_cache.get(msg_id)) is not None:
217-
msg = uni_msg
218-
else:
219-
msg = UniMessage.generate_without_reply(message=msg, bot=bot)
220-
unimsg_cache[msg_id] = msg
221-
return msg
217+
return uni_msg
218+
msg = event.get_message()
219+
uni_msg = UniMessage.generate_without_reply(message=msg, bot=bot)
220+
unimsg_cache[msg_id] = uni_msg
221+
if (ori_msg := getattr(event, "original_message", None)) is not None:
222+
ori_uni_msg = UniMessage.generate_without_reply(message=ori_msg, bot=bot)
223+
unimsg_origin_cache[msg_id] = ori_uni_msg
224+
if use_origin:
225+
return ori_uni_msg
226+
return uni_msg
222227
exc = None
223228
for ext in self.context:
224229
if not ext._overrides["message_provider"]:

src/nonebot_plugin_alconna/uniseg/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
from .constraint import SupportAdapterModule as SupportAdapterModule
5959
from .adapters import alter_get_builder, alter_get_fetcher, alter_get_exporter
6060

61-
__version__ = "0.56.0"
61+
__version__ = "0.56.1"
6262

6363
__plugin_meta__ = PluginMetadata(
6464
name="Universal Segment 插件",

tests/fake.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,10 @@ class Config:
158158
extra = "allow"
159159

160160
_message = field.pop("message", Message("test"))
161+
_original_message = field.pop("original_message", _message)
161162
event = FakeEvent(message={"id": str(get_msg_id()), "content": "text"}, **field) # type: ignore
162163
event._message = _message
163-
event.original_message = _message
164+
event.original_message = _original_message
164165
return event
165166

166167

tests/test_use_origin.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import pytest
2+
from nonebug import App
3+
from nonebot import get_adapter
4+
from arclet.alconna import Alconna
5+
from nonebot.adapters.satori import Bot, Adapter, Message
6+
7+
from tests.fake import fake_satori_bot_params, fake_message_event_satori
8+
9+
10+
@pytest.mark.asyncio()
11+
async def test_use_origin(app: App):
12+
from nonebot_plugin_alconna import on_alconna
13+
14+
test_cmd = on_alconna(Alconna("log"), use_origin=False)
15+
test_cmd1 = on_alconna(Alconna("ALClog"), use_origin=True)
16+
17+
@test_cmd.handle()
18+
async def _():
19+
await test_cmd.send("ok")
20+
21+
@test_cmd1.handle()
22+
async def _():
23+
await test_cmd1.send("ok1")
24+
25+
async with app.test_matcher([test_cmd, test_cmd1]) as ctx:
26+
adapter = get_adapter(Adapter)
27+
bot = ctx.create_bot(base=Bot, adapter=adapter, **fake_satori_bot_params())
28+
event = fake_message_event_satori(message=Message("log"), original_message=Message("ALClog"), id=123)
29+
ctx.receive_event(bot, event)
30+
ctx.should_call_send(event, "ok")
31+
ctx.should_call_send(event, "ok1")

0 commit comments

Comments
 (0)