|
11 | 11 | from nonebot_plugin_alconna.uniseg.exporter import Target, SupportAdapter, MessageExporter, SerializeFailed, export |
12 | 12 | from nonebot_plugin_alconna.uniseg.segment import ( |
13 | 13 | At, |
| 14 | + File, |
14 | 15 | Text, |
15 | 16 | AtAll, |
16 | 17 | Audio, |
@@ -91,6 +92,13 @@ async def media(self, seg: Union[Image, Voice, Video, Audio], bot: Union[Bot, No |
91 | 92 | else: |
92 | 93 | raise SerializeFailed(lang.require("nbp-uniseg", "invalid_segment").format(type=name, seg=seg)) |
93 | 94 |
|
| 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 | + |
94 | 102 | @export |
95 | 103 | async def hyper(self, seg: Hyper, bot: Union[Bot, None]) -> "MessageSegment": |
96 | 104 | 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 |
150 | 158 | group_id=int(_target.id), |
151 | 159 | messages=msg, |
152 | 160 | ) |
| 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 | + ) |
153 | 178 | if isinstance(target, Event): |
154 | 179 | return await bot.send(target, message, **kwargs) # type: ignore |
155 | 180 | if _target.private: |
|
0 commit comments