Skip to content

Commit ed3199e

Browse files
committed
✨ experiment onebot11 file send
1 parent 2bb8c1a commit ed3199e

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/nonebot_plugin_alconna/builtins/uniseg/market_face.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,17 @@ def mfbuild(builder: MessageBuilder, seg: BaseMessageSegment):
4242

4343
@custom_register(MarketFace, "mface")
4444
def mfbuild_ob11(builder: MessageBuilder, seg: BaseMessageSegment):
45+
emoji_package_id = seg.data["emoji_package_id"]
46+
if isinstance(emoji_package_id, str):
47+
if emoji_package_id.isdigit():
48+
tab_id = hex(int(emoji_package_id))
49+
else:
50+
tab_id = emoji_package_id
51+
else:
52+
tab_id = hex(emoji_package_id)
4553
return MarketFace(
4654
id=str(seg.data["emoji_id"]),
47-
tab_id=hex(int(seg.data["emoji_package_id"])),
55+
tab_id=tab_id,
4856
key=seg.data.get("key"),
4957
summary=seg.data.get("summary"),
5058
)

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from nonebot_plugin_alconna.uniseg.exporter import Target, SupportAdapter, MessageExporter, SerializeFailed, export
1212
from nonebot_plugin_alconna.uniseg.segment import (
1313
At,
14+
File,
1415
Text,
1516
AtAll,
1617
Audio,
@@ -91,6 +92,13 @@ async def media(self, seg: Union[Image, Voice, Video, Audio], bot: Union[Bot, No
9192
else:
9293
raise SerializeFailed(lang.require("nbp-uniseg", "invalid_segment").format(type=name, seg=seg))
9394

95+
@export
96+
async def file(self, seg: File, bot: Union[Bot, None]) -> "MessageSegment":
97+
if seg.path:
98+
return MessageSegment("$onebot11:file", {"file": Path(seg.path).resolve()})
99+
else:
100+
raise SerializeFailed(lang.require("nbp-uniseg", "invalid_segment").format(type="file", seg=seg))
101+
94102
@export
95103
async def hyper(self, seg: Hyper, bot: Union[Bot, None]) -> "MessageSegment":
96104
assert seg.raw, lang.require("nbp-uniseg", "invalid_segment").format(type="hyper", seg=seg)
@@ -150,6 +158,23 @@ async def send_to(self, target: Union[Target, Event], bot: Bot, message: Message
150158
group_id=int(_target.id),
151159
messages=msg,
152160
)
161+
if msg := message.include("$onebot11:file"):
162+
if _target.private:
163+
return await bot.call_api(
164+
"upload_private_file",
165+
user_id=int(_target.id),
166+
file=msg[0].data["file"].as_posix(),
167+
name=msg[0].data["file"].name,
168+
**kwargs,
169+
)
170+
else:
171+
return await bot.call_api(
172+
"upload_group_file",
173+
group_id=int(_target.id),
174+
file=msg[0].data["file"].as_posix(),
175+
name=msg[0].data["file"].name,
176+
**kwargs,
177+
)
153178
if isinstance(target, Event):
154179
return await bot.send(target, message, **kwargs) # type: ignore
155180
if _target.private:

0 commit comments

Comments
 (0)