Skip to content

Commit f57b9af

Browse files
committed
✨ support Milky
1 parent 194ab78 commit f57b9af

File tree

10 files changed

+487
-4
lines changed

10 files changed

+487
-4
lines changed

pdm.lock

Lines changed: 14 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +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.0",
7576
]
7677
test = [
7778
"nonebug>=0.4.3",

src/nonebot_plugin_alconna/builtins/uniseg/market_face.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def mfbuild(builder: MessageBuilder, seg: BaseMessageSegment):
3838
id=str(seg.data["id"]),
3939
summary=seg.data["name"],
4040
)
41+
if builder.get_adapter() is SupportAdapter.milky:
42+
url = seg.data["url"]
43+
id_ = url.split("/")[-2]
44+
return MarketFace(id=id_)
4145
return None
4246

4347

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from nonebot_plugin_alconna.uniseg.loader import BaseLoader
2+
from nonebot_plugin_alconna.uniseg.constraint import SupportAdapter
3+
4+
5+
class Loader(BaseLoader):
6+
def get_adapter(self) -> SupportAdapter:
7+
return SupportAdapter.milky
8+
9+
def get_builder(self):
10+
from .builder import MilkyMessageBuilder
11+
12+
return MilkyMessageBuilder()
13+
14+
def get_exporter(self):
15+
from .exporter import MilkyMessageExporter
16+
17+
return MilkyMessageExporter()
18+
19+
def get_fetcher(self):
20+
from .target import MilkyTargetFetcher
21+
22+
return MilkyTargetFetcher()
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
from typing import TYPE_CHECKING
2+
3+
from nonebot.adapters import Bot, Event
4+
from nonebot.adapters.milky.message import XML
5+
from nonebot.adapters.milky.event import MessageEvent
6+
from nonebot.adapters.milky.message import Face as FaceSegment
7+
from nonebot.adapters.milky.message import Image as ImageSegment
8+
from nonebot.adapters.milky.message import Reply as ReplySegment
9+
from nonebot.adapters.milky.message import Video as VideoSegment
10+
from nonebot.adapters.milky.message import Record as RecordSegment
11+
from nonebot.adapters.milky.message import Forward as ForwardSegment
12+
from nonebot.adapters.milky.message import Mention as MentionSegment
13+
from nonebot.adapters.milky.message import LightAPP as LightAppSegment
14+
from nonebot.adapters.milky.message import MentionAll as MentionAllSegment
15+
16+
from nonebot_plugin_alconna.uniseg.constraint import SupportAdapter
17+
from nonebot_plugin_alconna.uniseg.builder import MessageBuilder, build
18+
from nonebot_plugin_alconna.uniseg.segment import (
19+
At,
20+
AtAll,
21+
Emoji,
22+
Hyper,
23+
Image,
24+
Reply,
25+
Video,
26+
Voice,
27+
Reference,
28+
CustomNode,
29+
)
30+
31+
32+
class MilkyMessageBuilder(MessageBuilder):
33+
@classmethod
34+
def get_adapter(cls) -> SupportAdapter:
35+
return SupportAdapter.milky
36+
37+
@build("mention")
38+
def mention(self, seg: MentionSegment):
39+
if seg.data["user_id"] == 0:
40+
return AtAll()
41+
return At("user", str(seg.data["user_id"]))
42+
43+
@build("mention_all")
44+
def mention_all(self, seg: MentionAllSegment):
45+
return AtAll()
46+
47+
@build("face")
48+
def face(self, seg: FaceSegment):
49+
return Emoji(str(seg.data["face_id"]))
50+
51+
@build("image")
52+
def image(self, seg: ImageSegment):
53+
return Image(id=seg.data["resource_id"])
54+
55+
@build("video")
56+
def video(self, seg: VideoSegment):
57+
return Video(id=seg.data["resource_id"])
58+
59+
@build("record")
60+
def record(self, seg: RecordSegment):
61+
return Voice(id=seg.data["resource_id"])
62+
63+
@build("reply")
64+
def reply(self, seg: ReplySegment):
65+
if "client_seq" in seg.data:
66+
msg_id = f"{seg.data['message_seq']}#{seg.data['client_seq']}"
67+
else:
68+
msg_id = str(seg.data["message_seq"])
69+
return Reply(msg_id, origin=seg)
70+
71+
@build("forward")
72+
def forward(self, seg: ForwardSegment):
73+
if "forward_id" in seg.data:
74+
return Reference(seg.data["forward_id"])
75+
return Reference(
76+
nodes=[
77+
CustomNode(uid=str(msg.user_id), name=msg.name, content=self.generate(msg.segments))
78+
for msg in seg.data["messages"]
79+
]
80+
)
81+
82+
@build("light_app")
83+
def light_app(self, seg: LightAppSegment):
84+
return Hyper("json", seg.data["json_payload"])
85+
86+
@build("xml")
87+
def xml(self, seg: XML):
88+
return Hyper("xml", seg.data["xml_payload"])
89+
90+
async def extract_reply(self, event: Event, bot: Bot):
91+
if TYPE_CHECKING:
92+
assert isinstance(event, MessageEvent)
93+
if _reply := event.reply:
94+
if _reply.client_seq:
95+
msg_id = f"{_reply.message_seq}#{_reply.client_seq}"
96+
else:
97+
msg_id = str(_reply.message_seq)
98+
return Reply(msg_id, _reply.message, _reply)
99+
return None

0 commit comments

Comments
 (0)