Skip to content

Commit 7423f61

Browse files
committed
🧑‍💻 extract UniMessage.get_message_id, etc. to module functions
1 parent 69835e0 commit 7423f61

File tree

11 files changed

+141
-97
lines changed

11 files changed

+141
-97
lines changed

docs.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -656,15 +656,15 @@ async def send(
656656

657657
```python
658658
from nonebot import Event, Bot
659-
from nonebot_plugin_alconna.uniseg import UniMessage, Target
659+
from nonebot_plugin_alconna.uniseg import Target, get_message_id, get_target
660660

661661

662662
matcher = on_xxx(...)
663663

664664
@matcher.handle()
665-
asycn def _(bot: Bot, event: Event):
666-
target: Target = UniMessage.get_target(event, bot)
667-
msg_id: str = UniMessage.get_message_id(event, bot)
665+
async def _(bot: Bot, event: Event):
666+
target: Target = get_target(event, bot)
667+
msg_id: str = get_message_id(event, bot)
668668

669669
```
670670

src/nonebot_plugin_alconna/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
from .rule import AlconnaRule as AlconnaRule
9595
from .uniseg import CustomNode as CustomNode
9696
from .uniseg import UniMessage as UniMessage
97+
from .uniseg import get_target as get_target
9798
from .extension import Extension as Extension
9899
from .extension import Interface as Interface
99100
from .matcher import on_alconna as on_alconna
@@ -105,6 +106,7 @@
105106
from .params import AlconnaMatch as AlconnaMatch
106107
from .params import AlconnaQuery as AlconnaQuery
107108
from .uniseg import SupportScope as SupportScope
109+
from .uniseg import message_edit as message_edit
108110
from .model import CommandResult as CommandResult
109111
from .pattern import select_first as select_first
110112
from .params import AlcExecResult as AlcExecResult
@@ -117,6 +119,8 @@
117119
from .uniseg import SupportAdapter as SupportAdapter
118120
from .uniseg import apply_filehost as apply_filehost
119121
from .uniseg import custom_handler as custom_handler
122+
from .uniseg import get_message_id as get_message_id
123+
from .uniseg import message_recall as message_recall
120124
from .matcher import AlconnaMatcher as AlconnaMatcher
121125
from .consts import ALCONNA_ARG_KEY as ALCONNA_ARG_KEY
122126
from .uniseg import SerializeFailed as SerializeFailed

src/nonebot_plugin_alconna/builtins/extensions/reply.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from arclet.alconna import Alconna
55
from nonebot.internal.adapter import Bot, Event
66

7-
from nonebot_plugin_alconna.uniseg import reply_fetch
87
from nonebot_plugin_alconna import Reply, Extension, UniMessage
8+
from nonebot_plugin_alconna.uniseg import reply_fetch, get_message_id
99

1010

1111
class ReplyRecordExtension(Extension):
@@ -45,7 +45,7 @@ def get_reply(self, message_id: str) -> Optional[Reply]:
4545
async def receive_wrapper(self, bot: Bot, event: Event, command: Alconna, receive: UniMessage) -> UniMessage:
4646
if not (reply := await reply_fetch(event, bot)):
4747
return receive
48-
msg_id = UniMessage.get_message_id(event, bot)
48+
msg_id = get_message_id(event, bot)
4949
self.cache[msg_id] = reply
5050
return receive
5151

@@ -93,7 +93,7 @@ async def message_provider(self, event, state, bot, use_origin: bool = False):
9393
msg = event.get_message()
9494
except (NotImplementedError, ValueError):
9595
return None
96-
msg_id = UniMessage.get_message_id(event, bot)
96+
msg_id = get_message_id(event, bot)
9797
if msg_id in self.cache:
9898
return self.cache[msg_id]
9999
uni_msg = UniMessage.generate_sync(message=msg, bot=bot)

src/nonebot_plugin_alconna/builtins/plugins/with/extension.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from arclet.alconna import Alconna
66
from nonebot.internal.adapter import Bot, Event
77

8-
from nonebot_plugin_alconna import Target, Extension, UniMessage
8+
from nonebot_plugin_alconna import Target, Extension, UniMessage, get_target, get_message_id
99

1010

1111
class PrefixAppendExtension(Extension):
@@ -31,10 +31,10 @@ def post_init(self, alc: Alconna) -> None:
3131
self.sep = alc.separators[0]
3232

3333
async def receive_wrapper(self, bot: Bot, event: Event, command: Alconna, receive: UniMessage) -> UniMessage:
34-
msg_id = UniMessage.get_message_id(event, bot)
34+
msg_id = get_message_id(event, bot)
3535
if msg_id in self.cache:
3636
return self.cache[msg_id]
37-
target = UniMessage.get_target(event, bot)
37+
target = get_target(event, bot)
3838
prefix = self.supplier(target)
3939
if not prefix or not command.header_display.endswith(prefix):
4040
return receive

src/nonebot_plugin_alconna/extension.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from nonebot.compat import PydanticUndefined
1717
from nonebot.adapters import Bot, Event, Message
1818

19-
from .uniseg import UniMessage
19+
from .uniseg import UniMessage, get_message_id
2020

2121
OutputType = Literal["help", "shortcut", "completion", "error"]
2222
TM = TypeVar("TM", bound=Union[str, Message, UniMessage])
@@ -221,7 +221,7 @@ async def message_provider(
221221
if exc is not None:
222222
raise exc
223223
if event.get_type().startswith("message"):
224-
msg_id = UniMessage.get_message_id(event, bot)
224+
msg_id = get_message_id(event, bot)
225225
if use_origin and (uni_msg := unimsg_origin_cache.get(msg_id)) is not None:
226226
return uni_msg
227227
if (uni_msg := unimsg_cache.get(msg_id)) is not None:

src/nonebot_plugin_alconna/matcher.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737
from .util import annotation
3838
from .model import CompConfig
3939
from .rule import AlconnaRule
40-
from .uniseg import Text, Segment, UniMessage
4140
from .uniseg.fallback import FallbackStrategy
4241
from .uniseg.template import UniMessageTemplate
4342
from .uniseg.message import current_send_wrapper
4443
from .extension import Extension, ExtensionExecutor
44+
from .uniseg import Text, Segment, UniMessage, get_target, get_message_id
4545
from .consts import ALCONNA_RESULT, ALCONNA_ARG_KEY, ALCONNA_ARG_PATH, log
4646
from .params import CHECK, MIDDLEWARE, Check, AlconnaParam, ExtensionParam, assign, _seminal, _Dispatch, merge_path
4747

@@ -401,7 +401,7 @@ async def _receive(event: Event, matcher: Matcher) -> None:
401401
nonlocal id
402402
if not id:
403403
try:
404-
id = UniMessage.get_message_id(event, current_bot.get())
404+
id = get_message_id(event, current_bot.get())
405405
except Exception:
406406
pass
407407
matcher.set_target(RECEIVE_KEY.format(id=id))
@@ -620,9 +620,9 @@ def convert(cls, message: _M) -> Message | UniMessage | str:
620620
if isinstance(message, MessageTemplate):
621621
return message.format(**state[ALCONNA_RESULT].result.all_matched_args, **state)
622622
if isinstance(message, UniMessageTemplate):
623-
extra = {"$event": event, "$target": UniMessage.get_target(event, bot)}
623+
extra = {"$event": event, "$target": get_target(event, bot)}
624624
try:
625-
msg_id = UniMessage.get_message_id(event, bot)
625+
msg_id = get_message_id(event, bot)
626626
except Exception:
627627
pass
628628
else:
@@ -652,10 +652,10 @@ def i18n(
652652
**state[ALCONNA_RESULT].result.all_matched_args,
653653
**state,
654654
"$event": event,
655-
"$target": UniMessage.get_target(event, bot),
655+
"$target": get_target(event, bot),
656656
}
657657
try:
658-
msg_id = UniMessage.get_message_id(event, bot)
658+
msg_id = get_message_id(event, bot)
659659
except Exception:
660660
pass
661661
else:

src/nonebot_plugin_alconna/uniseg/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,13 @@
4343
from .segment import CustomNode as CustomNode
4444
from .tools import image_fetch as image_fetch
4545
from .tools import reply_fetch as reply_fetch
46+
from .functions import get_target as get_target
4647
from .params import MessageTarget as MessageTarget
48+
from .functions import message_edit as message_edit
4749
from .constraint import SupportScope as SupportScope
4850
from .segment import custom_handler as custom_handler
51+
from .functions import get_message_id as get_message_id
52+
from .functions import message_recall as message_recall
4953
from .segment import custom_register as custom_register
5054
from .constraint import SupportAdapter as SupportAdapter
5155
from .fallback import FallbackMessage as FallbackMessage
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
from __future__ import annotations
2+
3+
from typing import TYPE_CHECKING
4+
5+
from tarina import lang
6+
from nonebot.adapters import Bot, Event
7+
from nonebot.internal.matcher import current_bot, current_event
8+
9+
from .exporter import SerializeFailed
10+
from .adapters import alter_get_exporter
11+
12+
if TYPE_CHECKING:
13+
from .target import Target
14+
from .message import UniMessage
15+
16+
17+
async def message_recall(
18+
message_id: str | None = None, event: Event | None = None, bot: Bot | None = None, adapter: str | None = None
19+
):
20+
if not event:
21+
try:
22+
event = current_event.get()
23+
except LookupError as e:
24+
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
25+
if not bot:
26+
try:
27+
bot = current_bot.get()
28+
except LookupError as e:
29+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
30+
if not adapter:
31+
_adapter = bot.adapter
32+
adapter = _adapter.get_name()
33+
if fn := alter_get_exporter(adapter):
34+
return await fn.recall(message_id or fn.get_message_id(event), bot, event)
35+
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))
36+
37+
38+
async def message_edit(
39+
msg: UniMessage,
40+
message_id: str | None = None,
41+
event: Event | None = None,
42+
bot: Bot | None = None,
43+
adapter: str | None = None,
44+
):
45+
if not event:
46+
try:
47+
event = current_event.get()
48+
except LookupError as e:
49+
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
50+
if not bot:
51+
try:
52+
bot = current_bot.get()
53+
except LookupError as e:
54+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
55+
if not adapter:
56+
_adapter = bot.adapter
57+
adapter = _adapter.get_name()
58+
if fn := alter_get_exporter(adapter):
59+
return await fn.edit(msg, message_id or fn.get_message_id(event), bot, event)
60+
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))
61+
62+
63+
def get_message_id(event: Event | None = None, bot: Bot | None = None, adapter: str | None = None) -> str:
64+
if not event:
65+
try:
66+
event = current_event.get()
67+
except LookupError as e:
68+
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
69+
if hasattr(event, "__uniseg_message_id__"):
70+
return event.__uniseg_message_id__ # type: ignore
71+
if not adapter:
72+
if not bot:
73+
try:
74+
bot = current_bot.get()
75+
except LookupError as e:
76+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
77+
_adapter = bot.adapter
78+
adapter = _adapter.get_name()
79+
if fn := alter_get_exporter(adapter):
80+
setattr(event, "__uniseg_message_id__", msg_id := fn.get_message_id(event))
81+
return msg_id
82+
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))
83+
84+
85+
def get_target(event: Event | None = None, bot: Bot | None = None, adapter: str | None = None) -> Target:
86+
if not event:
87+
try:
88+
event = current_event.get()
89+
except LookupError as e:
90+
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
91+
if not adapter:
92+
if not bot:
93+
try:
94+
bot = current_bot.get()
95+
except LookupError as e:
96+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
97+
_adapter = bot.adapter
98+
adapter = _adapter.get_name()
99+
if fn := alter_get_exporter(adapter):
100+
return fn.get_target(event, bot)
101+
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))

0 commit comments

Comments
 (0)