好大的奶
DANGER
本章除了例子与乐子啥也没写
吐槽
本来这一节应该算是 MessageChain 的一个子章节,
但是一想到平时也没什么人用,还是单独开一章罢。
你可能曾经看到过这样的合并消息
Graia Framework Community
EroEroBot
群聊
EroEroBot: [图片]
群菜鸮: 好大的奶
群菜鸡: 好大的奶
查看3条转发消息
你很兴奋,想要看一看这奶到底有多大,但很可惜,也不知道你在可惜什么,当你点开聊天记录的时候,你看到的是这种景象:
转发的合并消息
EroEroBot
群菜鸮
好大的奶
群菜鸡
好大的奶
群菜龙
好大的奶
不知道是因为你没看到你想要看的东西,还是说你觉得这个奶完全不够大, 反正你发现你被骗了You're Rickrolling, 然后在下一秒,你突发奇想,能不能让机器人也整一个这个来骗人呢?
当然可以,我们现在就通过代码来直接复刻上面的效果:
TIP
你可能不太能理解为什么 MatchContent("好大的奶")
是什么东西, 你只需要知道,当消息为"好大的奶"的时候,就会触发这个 Listener
假设你真的很感兴趣,也可以直接跳到基础消息链处理器查看哦
python
import random
from datetime import datetime
from graia.ariadne.message.element import At, Plain, Image, Forward, ForwardNode
@channel.use(
ListenerSchema(
listening_events=[GroupMessage],
decorators=[MatchContent("好大的奶")],
)
)
async def create_forward(app: Ariadne, group: Group, member: Member):
fwd_nodeList = [
ForwardNode(
target=member,
time=datetime.now(),
message=MessageChain(Image(path="big_milk.jpg")),
)
]
member_list = await app.get_member_list(group)
for _ in range(3):
random_member: Member = random.choice(member_list)
fwd_nodeList.append(
ForwardNode(
target=random_member,
time=datetime.now(),
message=MessageChain("好大的奶"),
)
)
message = MessageChain(Forward(nodeList=fwd_nodeList))
await app.send_message(group, message)
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
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
因为比较简单,所以我们直接说明参数就好了:
python
ForwardNode(
target=member, # 发送者的信息(Member / Friend / Stranger 都行)
time=datetime.now(), # 发送时间
message=MessageChain(Image(path="big_milk.jpg")), # 发送的消息链
)
1
2
3
4
5
2
3
4
5
TIP
当你的 target
参数为 int
类型的时候, 你必须再输入一个 senderName
参数才能实例化成功。
注意
通过上面的例子你一定意识到了一个很严肃的问题:
你可以自己无中生有生成消息链然后传播出去
请不要通过该方法传播谣言,要不然我就要用我的靴子狠狠的踢你的屁股
相关链接
https://graia.cn/ariadne/feature/msg-chain/
EroEroBot:
本章完整示例可在 EroEroBot/modules/forward_message.py 找到。