-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmessage.py
69 lines (62 loc) · 2.53 KB
/
message.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from pathlib import Path
from uuid import uuid4
from avilla.core import Context, LocalFileResource
from avilla.core.elements import Audio, Face, File, Notice, NoticeAll, Picture, Text, Unknown, Video
from avilla.standard.qq.elements import Dice, FlashImage, MarketFace, Poke
from graia.amnesia.message import MessageChain
def display(msg: MessageChain):
res = []
for elem in msg.content:
if isinstance(elem, Text):
res.append(elem.text)
elif isinstance(elem, Picture):
res.append("[图片]")
elif isinstance(elem, Audio):
res.append("[音频]")
elif isinstance(elem, Video):
res.append("[视频]")
elif isinstance(elem, Face):
res.append(f"[表情:{elem.name or elem.id}]")
elif isinstance(elem, MarketFace):
res.append(f"[商店表情:{elem.summary or elem.id}]")
elif isinstance(elem, FlashImage):
res.append("[闪照]")
elif isinstance(elem, File):
res.append("[文件]")
elif isinstance(elem, Notice):
res.append(f"@{elem.display or elem.target.last_value}")
elif isinstance(elem, NoticeAll):
res.append("@全体成员")
elif isinstance(elem, Poke):
res.append("[戳一戳]")
elif isinstance(elem, Dice):
res.append("[骰子]")
elif isinstance(elem, Unknown):
res.append(f"{elem.type}")
else:
res.append(str(elem))
return "".join(res)
async def serialize_message(msg: MessageChain, ctx: Context, image_path: Path):
res = []
msg = msg.include(Text, Picture, Face)
for elem in msg:
if isinstance(elem, Picture):
name = f"{uuid4().hex}.jpg"
with (image_path / name).resolve().open("wb+") as img:
img.write(await ctx.fetch(elem.resource))
res.append({"type": "Image", "path": name})
elif isinstance(elem, Text):
res.append({"type": "Text", "text": elem.text})
elif isinstance(elem, Face):
res.append({"type": "Face", "id": elem.id, "name": elem.name})
return res
def deserialize_message(content: list[dict], image_path: Path):
res = []
for elem in content:
if elem["type"] == "Text":
res.append(Text(elem["text"]))
elif elem["type"] == "Image":
res.append(Picture(LocalFileResource(image_path / elem["path"])))
elif elem["type"] == "Face":
res.append(Face(elem["id"], elem["name"]))
return MessageChain(res)