Skip to content

Commit 5814f87

Browse files
committed
OriginalUniMsg Depends
resolve #106
1 parent 9c1b8d3 commit 5814f87

File tree

16 files changed

+92
-48
lines changed

16 files changed

+92
-48
lines changed

src/nonebot_plugin_alconna/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,19 @@
101101
from .params import match_value as match_value
102102
from .shortcut import funcommand as funcommand
103103
from .uniseg import image_fetch as image_fetch
104-
from .pattern import select_last as select_last
105104
from .params import AlconnaMatch as AlconnaMatch
106105
from .params import AlconnaQuery as AlconnaQuery
107106
from .uniseg import SupportScope as SupportScope
108107
from .uniseg import message_edit as message_edit
109108
from .model import CommandResult as CommandResult
110-
from .pattern import select_first as select_first
111109
from .params import AlcExecResult as AlcExecResult
112110
from .params import AlconnaResult as AlconnaResult
113111
from .uniseg import MessageTarget as MessageTarget
114112
from .typings import Strikethrough as Strikethrough
115113
from .consts import ALCONNA_RESULT as ALCONNA_RESULT
116114
from .params import AlconnaContext as AlconnaContext
117115
from .params import AlconnaMatches as AlconnaMatches
116+
from .uniseg import OriginalUniMsg as OriginalUniMsg
118117
from .uniseg import SupportAdapter as SupportAdapter
119118
from .uniseg import apply_filehost as apply_filehost
120119
from .uniseg import custom_handler as custom_handler

src/nonebot_plugin_alconna/argv.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def build(self, data: str | list[str] | Message | UniMessage) -> Self:
5454
"""
5555
self.reset()
5656
if isinstance(data, Message):
57-
data = UniMessage.generate_sync(message=data, adapter=self.context.get("$adapter.name"))
57+
data = UniMessage.of(data, adapter=self.context.get("$adapter.name"))
5858
else:
5959
data = UniMessage(data)
6060
self.origin = data

src/nonebot_plugin_alconna/builtins/extensions/onebot11.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ async def message_provider(
4848
if cache_msg and (uni_msg := self.cache.get(msg_id)) is not None:
4949
return uni_msg
5050
msg = Message._validate(event.message) # type: ignore
51-
uni_msg = UniMessage.generate_without_reply(message=msg, bot=bot)
51+
uni_msg = UniMessage.of(message=msg, bot=bot)
5252
self.cache[msg_id] = uni_msg
5353
return uni_msg
5454
return None

src/nonebot_plugin_alconna/builtins/extensions/reply.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ async def message_provider(self, event, state, bot, use_origin: bool = False):
9797
msg_id = get_message_id(event, bot)
9898
if cache_msg and msg_id in self.cache:
9999
return self.cache[msg_id]
100-
uni_msg = UniMessage.generate_sync(message=msg, bot=bot)
100+
uni_msg = UniMessage.of(msg, bot=bot)
101101
self.cache[msg_id] = uni_msg
102102
if not (reply := await reply_fetch(event, bot)):
103103
return uni_msg
@@ -106,7 +106,7 @@ async def message_provider(self, event, state, bot, use_origin: bool = False):
106106
reply_msg = reply.msg
107107
if isinstance(reply_msg, str):
108108
reply_msg = msg.__class__(reply_msg)
109-
uni_msg_reply = UniMessage.generate_sync(message=reply_msg, bot=bot)
109+
uni_msg_reply = UniMessage.of(reply_msg, bot=bot)
110110
if self.add_left:
111111
uni_msg_reply += self.sep
112112
uni_msg_reply.extend(uni_msg)

src/nonebot_plugin_alconna/extension.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@ async def message_provider(
161161
if cache_msg and (uni_msg := unimsg_cache.get(msg_id)) is not None:
162162
return uni_msg
163163
msg = event.get_message()
164-
uni_msg = UniMessage.generate_without_reply(message=msg, bot=bot)
164+
uni_msg = UniMessage.of(message=msg, bot=bot)
165165
unimsg_cache[msg_id] = uni_msg
166166
if (ori_msg := getattr(event, "original_message", None)) is not None:
167-
ori_uni_msg = UniMessage.generate_without_reply(message=ori_msg, bot=bot)
167+
ori_uni_msg = await UniMessage.of(message=ori_msg, bot=bot).attach_reply(event=event, bot=bot)
168168
unimsg_origin_cache[msg_id] = ori_uni_msg
169169
if use_origin:
170170
return ori_uni_msg

src/nonebot_plugin_alconna/matcher.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ async def _key_getter(event: Event, bot: Bot, matcher: AlconnaMatcher, state: T_
545545
if not msg:
546546
await matcher.reject(prompt, fallback=fallback)
547547
if not isinstance(msg, UniMessage):
548-
msg = await UniMessage.generate(message=msg, event=event, bot=bot)
548+
msg = UniMessage.of(message=msg, bot=bot)
549549
if arg.value.alias == "*":
550550
if TYPE_CHECKING:
551551
assert isinstance(arg.value, _AllParamPattern)
@@ -846,7 +846,7 @@ async def wrapper(event: Event):
846846
res = await wait.wait(timeout=timeout)
847847
if res is None:
848848
return None
849-
return await UniMessage.generate(message=cast(Message, res))
849+
return UniMessage.of(message=cast(Message, res))
850850

851851
@classmethod
852852
def test(cls, message: str | UniMessage, expected: dict[str, Any] | None = None, prefix: bool = True):

src/nonebot_plugin_alconna/uniseg/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from .params import MessageTarget as MessageTarget
4848
from .functions import message_edit as message_edit
4949
from .constraint import SupportScope as SupportScope
50+
from .params import OriginalUniMsg as OriginalUniMsg
5051
from .segment import custom_handler as custom_handler
5152
from .functions import get_message_id as get_message_id
5253
from .functions import message_recall as message_recall

src/nonebot_plugin_alconna/uniseg/adapters/heybox/builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from nonebot.adapters.heybox.message import MessageSegment
1+
from nonebot.adapters.heybox.message import MessageSegment # type: ignore
22

33
from nonebot_plugin_alconna.uniseg.segment import Text
44
from nonebot_plugin_alconna.uniseg.constraint import SupportAdapter

src/nonebot_plugin_alconna/uniseg/adapters/heybox/exporter.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
from tarina import lang
55
from nonebot.adapters import Bot, Event
6-
from nonebot.adapters.heybox.bot import Bot as HeyboxBot
7-
from nonebot.adapters.heybox.event import UserIMMessageEvent
8-
from nonebot.adapters.heybox.message import Message, MessageSegment
6+
from nonebot.adapters.heybox.bot import Bot as HeyboxBot # type: ignore
7+
from nonebot.adapters.heybox.event import UserIMMessageEvent # type: ignore
8+
from nonebot.adapters.heybox.message import Message, MessageSegment # type: ignore
99

1010
from nonebot_plugin_alconna.uniseg.constraint import SupportScope
1111
from nonebot_plugin_alconna.uniseg.segment import At, Text, Image, Reply
@@ -23,8 +23,8 @@ def get_message_type(self):
2323
def get_target(self, event: Event, bot: Union[Bot, None] = None) -> Target:
2424
if isinstance(event, UserIMMessageEvent):
2525
return Target(
26-
event.channel_id,
27-
parent_id=event.room_id,
26+
event.channel_id, # type: ignore
27+
parent_id=event.room_id, # type: ignore
2828
channel=True,
2929
adapter=self.get_adapter(),
3030
self_id=bot.self_id if bot else None,
@@ -34,7 +34,7 @@ def get_target(self, event: Event, bot: Union[Bot, None] = None) -> Target:
3434

3535
def get_message_id(self, event: Event) -> str:
3636
if isinstance(event, UserIMMessageEvent):
37-
return str(event.im_seq)
37+
return str(event.im_seq) # type: ignore
3838
raise NotImplementedError
3939

4040
@export
@@ -84,7 +84,7 @@ async def send_to(self, target: Union[Target, Event], bot: Bot, message: Message
8484
assert isinstance(target, UserIMMessageEvent)
8585
return await bot.send(event=target, message=message, **kwargs, is_reply=reply_id is not None)
8686
return await bot.send_to_channel(
87-
target.parent_id,
87+
target.parent_id, # type: ignore
8888
target.id,
8989
message,
9090
reply_id=reply_id,

src/nonebot_plugin_alconna/uniseg/message.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from json import dumps, loads
77
from types import FunctionType
88
from collections.abc import Iterable, Sequence, Awaitable
9-
from typing_extensions import Self, TypeAlias, SupportsIndex
9+
from typing_extensions import Self, TypeAlias, SupportsIndex, deprecated
1010
from typing import TYPE_CHECKING, Any, Union, Literal, TypeVar, Callable, NoReturn, Protocol, overload
1111

1212
from tarina import lang
@@ -1212,6 +1212,7 @@ def rstrip(self, *segments: str | Segment | type[Segment]) -> Self:
12121212
break
12131213
return self.__class__(copy)
12141214

1215+
@deprecated("`UniMessage.generate` is deprecated, use `UniMessage.of()` and `await msg.attach_reply()` instead")
12151216
@staticmethod
12161217
async def generate(
12171218
*,
@@ -1230,23 +1231,9 @@ async def generate(
12301231
message = event.get_message()
12311232
except Exception:
12321233
return UniMessage()
1233-
if not adapter:
1234-
if not bot:
1235-
try:
1236-
bot = current_bot.get()
1237-
except LookupError as e:
1238-
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
1239-
_adapter = bot.adapter
1240-
adapter = _adapter.get_name()
1241-
if not (fn := alter_get_builder(adapter)):
1242-
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))
1243-
result = UniMessage(fn.generate(message))
1244-
if (event and bot) and (_reply := await fn.extract_reply(event, bot)):
1245-
if result.has(Reply) and result.index(Reply) == 0:
1246-
result.pop(0)
1247-
result.insert(0, _reply)
1248-
return result
1234+
return await UniMessage.of(message, bot=bot, adapter=adapter).attach_reply(event, bot)
12491235

1236+
@deprecated("`UniMessage.generate_sync` is deprecated, use `UniMessage.of` instead")
12501237
@staticmethod
12511238
def generate_sync(
12521239
*,
@@ -1265,6 +1252,17 @@ def generate_sync(
12651252
message = event.get_message()
12661253
except Exception:
12671254
return UniMessage()
1255+
return UniMessage.of(message, bot=bot, adapter=adapter)
1256+
1257+
generate_without_reply = generate_sync
1258+
1259+
@classmethod
1260+
def of(
1261+
cls,
1262+
message: Message,
1263+
bot: Bot | None = None,
1264+
adapter: str | None = None,
1265+
):
12681266
if not adapter:
12691267
if not bot:
12701268
try:
@@ -1277,7 +1275,24 @@ def generate_sync(
12771275
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=adapter))
12781276
return UniMessage(fn.generate(message))
12791277

1280-
generate_without_reply = generate_sync
1278+
async def attach_reply(self, event: Event | None = None, bot: Bot | None = None) -> Self:
1279+
if not event:
1280+
try:
1281+
event = current_event.get()
1282+
except LookupError as e:
1283+
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
1284+
if not bot:
1285+
try:
1286+
bot = current_bot.get()
1287+
except LookupError as e:
1288+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
1289+
if not (fn := alter_get_builder(bot.adapter.get_name())):
1290+
raise SerializeFailed(lang.require("nbp-uniseg", "unsupported").format(adapter=bot.adapter.get_name()))
1291+
if _reply := await fn.extract_reply(event, bot):
1292+
if self.has(Reply) and self.index(Reply) == 0:
1293+
self.pop(0)
1294+
self.insert(0, _reply) # type: ignore
1295+
return self
12811296

12821297
def _handle_i18n(self, extra: dict, *args, **kwargs):
12831298
segments = [*self]

0 commit comments

Comments
 (0)