Skip to content
On this page

发送消息

在消息响应器内返回 Chain 对象,或使用 Message 对象的 send 方法,均可发送消息。

python
@bot.on_message(keywords='hello')
async def _(data: Message):
    await data.send(Chain(data).text('hello'))

    return Chain(data).text(data.nickname)
image

Chain 对象

参数名类型释义默认值
dataMessageMessage 对象None
atbool是否 @ 用户True
referencebool是否回复用户(引用消息)False
chain_builderChainBuilderChain 辅助构建实例ChainBuilder()

Chain 对象是构建你的消息体的工具类。任何需要发送消息的时候,消息都必须由 Chain 类创建。
Chain 对象提供丰富的消息构建方式,可以让你发送多彩的文字图片,甚至是html模板。

这是最简单的一条文本消息:

python
Chain(data).text('hello, world')

更多类型请查看左侧导航消息构建元素

构建消息的方法

普通消息

Chain 对象支持链式语法,用于构建复杂的消息结构。
只需要按顺序以链式使用上述方法,即可拼接出内容丰富的消息。Chain 在最终构建消息的时候,会优化图片与文字的组成,减少消息的请求数量。

python
Chain(data).text(...).image(...).text(...).html(...)

合并转发消息

合并转发消息需要使用独立的工具类创建

空 Chain

实例化 Chain 对象时,不传入 Message 对象构建的。本文称之为 “空 Chain”。空 Chain 一般用于预构建消息。

python
Chain().text(...).image(...)

使用辅助类扩展构建

Chain 在构建时,可使用辅助类介入图片或浏览器的构建过程。

创建辅助类

python
from typing import Union
from amiyabot import Chain, ChainBuilder
from playwright.async_api import Page


# 继承 ChainBuilder
class MyBuilder(ChainBuilder):
    @classmethod
    async def get_image(cls, image: Union[str, bytes]):
        ...
        return image

    @classmethod
    async def on_page_rendered(cls, page: Page):
        ...


# 在构造参数里使用辅助类
chain = Chain(..., chain_builder=MyBuilder())

# 为属性赋值使用辅助类
chain.builder = MyBuilder()

get_image 函数

该函数会在 chain 构建图片消息时调用,每张图片会调用一次。传入一个参数 image ,类型为 str(path 或 url) 或 bytes(图片字节数据)。该函数必须拥有返回值,同样是以上两种类型,chain 会根据返回的类型做进一步处理。

on_page_rendered 函数

该函数会在 chain 构建浏览器渲染的图片并打开了页面时调用,提供了浏览器的 Page 对象,可在此对 Page 进行操作(如对页面进行 JS 注入等)。

提示

构建浏览器渲染的图片同样也会调用一次 get_image 函数。