消息与消息事件
消息(Message) 是 Avilla 着重支持的交互形式,我们提供了完善的抽象来处理不同平台上的这一行为。
from avilla.core.message import Message
from avilla.standard.core.message import MessageReceived
@broadcast.receiver(MessageReceived)
async def on_message_received(message: Message):
...
Avilla 在标准化模块(avilla.standard.core
)中包含了以下事件声明,你可以直接从该模块导入,并通过文档中提供的 API Reference 获取其详情:
MessageReceived
: 接收到消息。MessageSent
: 消息发送,可能获取到其他客户端的同步事件。MessageEdited
: 消息被编辑,可能获取到其他客户端的同步事件。MessageRevoked
: 消息被撤回/删除。无法获取 Message 对象
消息 (Message) 对象的字段定义如下所示。
class Message(
id: str,
scene: Selector, # 消息所处的场景。
sender: Selector, # 消息的发送者,通常也在 scene 范围内。
content: MessageChain, # 消息的内容,以 MessageChain 表示。
time: datetime, # 消息发送的时刻。
reply: Selector | None = None # 消息的回复对象,可选。
)
注意,消息对象是可以被转换为选择器形式的 (Selectable
,具备 to_selector
方法),请参考以下示例:
msg = Message(
id="message-test",
scene=Selector().land(...).group(...)
)
msg.to_selector() # => Selector().land(...).group(...).message("message-test")
你可以认为 Selector.last_key
(返回最后一个节点名称的 property) 是 "message"
的,
都指向某个 Message。
此外,Message 可以作为 Metadata
使用,关于这方面的详情可以参考以下链接: