if AtAll in message_chain:
print('AtAll')
if At(bot.qq) in message_chain:
print('At Me')
if MessageChain([At(bot.qq), Plain('Hello!')]) in message_chain:
print('Hello!')
if 'Hello' in message_chain:
print('Hi!')
消息链的 has 方法和 in 等价。
if message_chain.has(AtAll):
print('AtAll')
也可以使用 >= 和 <=运算符:
if MessageChain([At(bot.qq), Plain('Hello!')]) <= message_chain:
print('Hello!')
Feature Request
参照 YiriMirai 的实现:
一个构造消息链的例子:
Plain
可以省略。在调用 API 时,参数中需要 MessageChain 的,也可以使用
List[MessageComponent]
代替。 例如,以下两种写法是等价的:使用
str(message_chain)
获取消息链的字符串表示,字符串采用 mirai 码格式, 并自动按照 mirai 码的规定转义。 参看 mirai 的文档。 获取未转义的消息链字符串,可以使用deserialize(str(message_chain))
。可以使用 for 循环遍历消息链中的消息组件。
可以使用
==
运算符比较两个消息链是否相同。可以使用
in
运算检查消息链中:消息链的
has
方法和in
等价。也可以使用
>=
和<=
运算符:需注意,此处的子消息链匹配会把 Plain 看成一个整体,而不是匹配其文本的一部分。 如需对文本进行部分匹配,请采用 mirai 码字符串匹配的方式。
消息链对索引操作进行了增强。以消息组件类型为索引,获取消息链中的全部该类型的消息组件。
以
类型, 数量
为索引,获取前至多多少个该类型的消息组件。消息链的
get
方法和索引操作等价。消息链的
get
方法还可指定第二个参数count
,这相当于以类型, 数量
为索引。可以用加号连接两个消息链。
可以用
*
运算符复制消息链。除此之外,消息链还支持很多 list 拥有的操作,比如
index
和count
。消息链对这些操作进行了拓展。在传入元素的地方,一般都可以传入元素的类型。