接收消息
在上一节 注册消息响应 中讲述了如何注册一个接收指定消息的函数,当接收到消息时,函数被执行时,参数 data: Message 就是接收到的消息的内容。
Message 对象是接收到消息之后预处理化的一个消息数据对象。内含这则消息相关的各项属性,以及针对这则消息的一些操作API。
该对象主要应用在功能函数和自定义检查中。建议在开发时引入 Message 对象并注解在对应地方。
python
from amiyabot import Message
async def my_verify(data: Message):
...
@bot.on_message(verify=my_verify)
async def _(data: Message):
print('recv:', data.text)
...Message 对象
重要变动
从 1.9.8 起,如果配置了前缀触发词,Message 对象内的消息文本系列字段将不再包含触发对话的前缀(Commit 99ada6b), 前缀在对话文本中被移除后将赋值到 text_prefix 属性内。
属性
| 属性 | 类型 | 释义 |
|---|---|---|
| instance | BotAdapterProtocol | bot 实例 |
| message | dict | 原始消息字典 |
| message_id | str | 消息 ID |
| message_type | str | 消息类型(适用于群聊适配器) |
| face | List[str] | 消息内表情 ID 列表 |
| image | List[str] | 消息内图片 URL 列表 |
| text | str | 消息文本(不包含触发词、中间件处理) |
| text_digits | str | 消息文本(不包含触发词、中间件处理、中文转数字处理) |
| text_unsigned | str | 消息文本(不包含触发词、去字符处理) |
| text_original | str | 消息文本(原始文本) |
| text_words | List[str] | 消息文本分词 |
| text_prefix | str | 消息触发词 |
| at_target | List[str] | 消息内 @ 的对象列表 |
| is_at | bool | 是否 @ 机器人 |
| is_admin | bool | 是否为子频道管理员 |
| is_direct | bool | 是否是私信消息 |
| user_id | str | 用户 ID |
| guild_id | str | 频道 ID |
| src_guild_id | str | 来源频道 ID,私信下有效 |
| channel_id | str | 子频道 ID |
| nickname | str | 用户昵称 |
| avatar | str | 用户头像的 URL |
| joined_at | ISO8601 timestamp | 用户加入频道的时间 |
| verify | Verify 对象 | 自定义检查的结果 |
| time | int | 消息时间 |
方法
| 方法名 | 参数 | 释义 | 异步 |
|---|---|---|---|
| send | reply | 发送一条消息 | 是 |
| wait | reply,force,max_time,data_filter | 等待用户消息 | 是 |
| wait_channel | reply,force,clean,max_time,data_filter | 等待子频道消息 | 是 |
| recall | 撤回消息 | 是 |
接下来,使用 Message 对象提供的属性完成业务逻辑,并发送消息。