Skip to content

Commit 2b3289f

Browse files
committed
🐛 milky media build
1 parent e9f6c6f commit 2b3289f

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ dev = [
7272
"pyyaml>=6.0.1",
7373
"fix-future-annotations>=0.5.0",
7474
# "nonebot-adapter-heybox>=0.1.1; python_version >= \"3.11\"",
75-
"nonebot-adapter-milky>=0.1.2",
75+
"nonebot-adapter-milky>=0.1.3",
7676
]
7777
test = [
7878
"nonebug>=0.4.3",

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from base64 import b64decode
12
from typing import TYPE_CHECKING
23

34
from nonebot.adapters import Bot, Event
@@ -50,14 +51,41 @@ def face(self, seg: FaceSegment):
5051

5152
@build("image")
5253
def image(self, seg: ImageSegment):
54+
uri = seg.data.get("uri")
55+
if isinstance(uri, str):
56+
if uri.startswith("http"):
57+
return Image(id=seg.data["resource_id"], url=uri)
58+
if uri.startswith("file://"):
59+
return Image(path=uri[7:])
60+
if uri.startswith("base64://"):
61+
b64 = uri[9:]
62+
return Image(id=seg.data["resource_id"], raw=b64decode(b64))
5363
return Image(id=seg.data["resource_id"])
5464

5565
@build("video")
5666
def video(self, seg: VideoSegment):
67+
uri = seg.data.get("uri")
68+
if isinstance(uri, str):
69+
if uri.startswith("http"):
70+
return Video(id=seg.data["resource_id"], url=uri)
71+
if uri.startswith("file://"):
72+
return Video(path=uri[7:])
73+
if uri.startswith("base64://"):
74+
b64 = uri[9:]
75+
return Video(id=seg.data["resource_id"], raw=b64decode(b64))
5776
return Video(id=seg.data["resource_id"])
5877

5978
@build("record")
6079
def record(self, seg: RecordSegment):
80+
uri = seg.data.get("uri")
81+
if isinstance(uri, str):
82+
if uri.startswith("http"):
83+
return Voice(id=seg.data["resource_id"], url=uri)
84+
if uri.startswith("file://"):
85+
return Voice(path=uri[7:])
86+
if uri.startswith("base64://"):
87+
b64 = uri[9:]
88+
return Voice(id=seg.data["resource_id"], raw=b64decode(b64))
6189
return Voice(id=seg.data["resource_id"])
6290

6391
@build("reply")

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,13 +180,19 @@ async def reference(self, seg: Reference, bot: Union[Bot, None]) -> "MessageSegm
180180
messages = []
181181
for node in seg.children:
182182
if isinstance(node, RefNode):
183-
continue
184-
content = self.get_message_type()()
185-
if isinstance(node.content, str):
186-
content.extend(self.get_message_type()(node.content))
183+
if not node.context:
184+
continue
185+
source = await bot.get_message(
186+
message_scene="group", peer_id=int(node.context), message_seq=int(node.id)
187+
)
188+
messages.append(MessageSegment.node(source.sender_id, source.sender.nickname, source.message))
187189
else:
188-
content.extend(await self.export(node.content, bot, True))
189-
messages.append(MessageSegment.node(user_id=int(node.uid), name=node.name, segments=content))
190+
content = self.get_message_type()()
191+
if isinstance(node.content, str):
192+
content.extend(self.get_message_type()(node.content))
193+
else:
194+
content.extend(await self.export(node.content, bot, True))
195+
messages.append(MessageSegment.node(user_id=int(node.uid), name=node.name, segments=content))
190196
if not messages:
191197
raise SerializeFailed(lang.require("nbp-uniseg", "invalid_segment").format(type="forward", seg=seg))
192198
return MessageSegment.forward(messages)

0 commit comments

Comments
 (0)