消息模板(Template)

note

此篇文章是从之前的文档处迁移过来的, 大多数功能还能用...吧.

现在你在 MessageChain.create 里使用 * 解包符也可以达到同样的效果, 不过比较丑; 这个包应该是兼容的, 如果不兼容, 请直接在 Application 的 issue 里提, 不然我看不到.

有时候, 对非常非常非常长的消息链的排版和调整可能会让你感到厌烦, 所以我们提供了 模板(Template) 机制来帮助开发者生成规范的消息链.

安装

模板机制并不内置于 Graia Application for Mirai 中, 所以你需要通过你的包管理器获取:

pip install graia-template
# 使用 poetry
poetry add graia-template

使用

当你顺利安装了库后, 你就可以导入并使用了:

from graia.template import Template

你可以通过这样的方式使用模板:

Template("Hello, $target!").render(
target=At(member.id)
)

我们通过 $ 在模板字符串内定义一个模板块, 并通过模板块定位, 生成出最后的消息链.

以下模板块是可以接受的:

$target
$t1
$t2
$0
$01
$02
$83123132

以下模板块无效:

$1aff
$-232
$<234w>
$我不是模板块
$の
$😈
tip

你可以通过以下代码判断你的模板块是否有效:

import regex
regex.match(r"^(?|(\$[a-zA-Z_][a-zA-Z0-9_]*)|(\$[0-9]*))$", "$我不是模板块")

获得 Template 实例后, 我们就可以通过 Template.render 方法生成消息链了.

warning

生成的消息链不一定是可以被安全发送的.
通过 MessageChain.isSendable 方法可以检查消息链是否可以被安全发送.

Template(f"Hello, $target! 在你的 GitHub, 今天共收获了 {star_increase} 个 star, Congratulations!").render(
target=At(member.id)
)

Template.render 只接受 Union[InternalElement, ExternalElement], 并且我们使用了 pydantic.validate_arguments 对传入的参数进行检查, 所以你得小心点使用这个方法.

note

这里有可能出现问题...如果可以就在 Application 的 issue 里面提, 其他的仓库我不经常看.