消息(Meesage)

消息(Message)参考中包含了当前LM所有可用的消息类型。

消息与消息元素

介绍

消息Contact对象进行交流的实体,基于消息的复杂性,lua-mirai中的消息通常由不同的消息元素组合而成。

如一个图片与文本消息,一般会由三个不同类型的消息元素构成。分别是SourceImagePlainText

消息元素构造

  1. 字符串的形式

LM中,一个字符串可代表一个纯文本类型的消息元素。如"Hello"代表一个纯文本消息元素。

"Hello" 等同于 PlainText("Hello")

  1. 消息元素构造函数

LM提供了丰富的消息元素构造函数,例如

Face(1) -- 构造一个表情
AtAll() -- 构造"@全体成员" 

消息(Message)参考中包含了当前LM所有可用的消息构造函数。

消息元素组合

将多个消息元素拼接可构成一个消息,而消息之间同样也可以进行拼接,构成新的消息

组合方式

LM中,可以使用lua拼接操作符 ..+ 进行拼接,下面是一个简单的示例:

ImageUrl("http://xxxxx", sender) .. Face(1) .. "hello"

消息解析

消息元素遍历

消息实现了lua中的表的所有方法,因此可以使用lua中处理表的方式处理组合消息,示例:

Event.subscribe(function(event)
    if (type(event)=="FriendMessageEvent") then
        for i,v in ipairs(event.message) do -- 遍历所有消息元素
            print(tostring(v))
        end
    end
end)

当你对message对象使用tostring或print方法输出时,消息会被采用一种mirai码的编码方式以字符串的形式表示,如[mirai:image:xxxxxx]。 同样地,也可以借助Code构造函数以使用mirai码构造消息,如Code("[mirai:image:xxxxxx]")

获取消息中包含消息元素的个数

输出个数

print("length:" .. tostring(#event.message))

获取某个位置的消息元素

获取位置1处的消息元素:

print(message[1])

判断消息元素类型

遍历所有消息元素并输出类型

for i,v in ipairs(event.message) do
    print(type(v))
end

检索指定类型的消息元素

获取类型为At的消息元素

print(event.message["At"])
Last Updated:
Contributors: only52607