Skip to content

好大的奶

DANGER

本章除了例子与乐子啥也没写

吐槽

本来这一节应该算是 MessageChain 的一个子章节,
但是一想到平时也没什么人用,还是单独开一章罢。

你可能曾经看到过这样的合并消息

Graia Framework Community
EroEroBot
群聊的聊天记录
EroEroBot: [图片]
群菜鸮: 好大的奶
群菜鸡: 好大的奶
查看4条转发消息

你很兴奋,想要看一看这奶到底有多大,但很可惜,也不知道你在可惜什么,当你点开聊天记录的时候,你看到的是这种景象:

转发的合并消息
EroEroBot
群菜鸮
好大的奶
群菜鸡
好大的奶
群菜龙
好大的奶

不知道是因为你没看到你想要看的东西,还是说你觉得这个奶完全不够大, 反正你发现你被骗了You're Rickrolling, 然后在下一秒,你突发奇想,能不能让机器人也整一个这个来骗人呢?

当然可以,我们现在就通过代码来直接复刻上面的效果:

TIP

你可能不太能理解为什么 MatchContent("好大的奶") 是什么东西, 你只需要知道,当消息为"好大的奶"的时候,就会触发这个 Listener

假设你真的很感兴趣,也可以直接跳到第 8 章第 1 节查看哦

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

因为比较简单,所以我们直接说明参数就好了:

python
ForwardNode(
    target=member,  # 发送者的信息(Member / Friend / Stranger 都行)
    time=datetime.now(),  # 发送时间
    message=MessageChain(Image(path="big_milk.jpg")),  # 发送的消息链
)
1
2
3
4
5

TIP

当你的 target 参数为 int 类型的时候, 你必须再输入一个 senderName 参数才能实例化成功。

注意

通过上面的例子你一定意识到了一个很严肃的问题:
你可以自己无中生有生成消息链然后传播出去
请不要通过该方法传播谣言,要不然我就要用我的靴子狠狠的踢你的屁股

Tip:

本文档使用 CC BY-NC-SA 4.0 协议进行共享,详情见 README

MIT License