mirai-core / net.mamoe.mirai.message.data / Message

Message

interface Message

可发送的或从服务器接收的消息. 采用这样的消息模式是因为 QQ 的消息多元化, 一条消息中可包含 纯文本, 图片 等.

消息 分为

在 Kotlin 使用 Message:

这与使用 String 的使用非常类似.

比较 SingleMessageString: if(message.contentToString() == "你好") qq.sendMessage(event)

连接 MessageMessage, String, (使用 operator Message.plus):

    text = PlainText("Hello ")
    qq.sendMessage(text + "world")

Message1 + Message2 + Message3, 类似 String 的连接:

+----------+ plus +----------+ plus +----------+ | Message1 | <------ | Message2 | <------ | Message3 | +----------+ +----------+ +----------+

但注意: 不能 String + Message. 只能 Message + String

实现规范

MessageChain 外, 所有 Message 的实现类都有伴生对象实现 Key 接口.

CharSequence 继承

所有 CharSequence 的行为均由 toString 委托.

即, appendable.append(message) 相当于 appendable.append(message.toString())

See Also

PlainText

Image

Face

At

AtAll

QuoteReply

RichMessage

HummerMessage

CustomMessage

MessageChain

buildMessageChain

Contact.sendMessage

Types

Key

类型 Key. 由伴生对象实现, 表示一个 Message 对象的类型.

interface Key<out M : Message>

Functions

contains

open operator fun contains(sub: String): Boolean

contentEquals

判断内容是否与 another 相等.

open fun contentEquals(another: Message, ignoreCase: Boolean = false): Boolean
open fun contentEquals(another: String, ignoreCase: Boolean = false): Boolean

contentToString

转为最接近官方格式的字符串. 如 At(member) + "test" 将转为 "@群名片 test".

abstract fun contentToString(): String

eq

open infix fun eq(other: Message): Boolean

contentToStringother 比较

open infix fun eq(other: String): Boolean

followedBy

thistail 连接.

open fun followedBy(tail: Message): MessageChain

followedBy1

open fun followedBy1(tail: Message): CombinedMessage

plus

open operator fun plus(another: Message): MessageChain
open operator fun plus(another: SingleMessage): MessageChain
open operator fun plus(another: String): MessageChain
open operator fun plus(another: CharSequence): MessageChain

plus1

open fun plus1(another: Message): CombinedMessage
open fun plus1(another: SingleMessage): CombinedMessage
open fun plus1(another: String): CombinedMessage
open fun plus1(another: CharSequence): CombinedMessage

toString

得到包含 mirai 消息元素代码的, 易读的字符串. 如 At(member) + "test" 将转为 "[mirai:at:qqId]test"

abstract fun toString(): String

Extension Functions

asMessageChain

得到包含 thisMessageChain.

fun Message.asMessageChain(): MessageChain

flatten

扁平化 Message

fun Message.flatten(): Sequence<SingleMessage>

isContentEmpty

判断消息内容是否为空.

fun Message.isContentEmpty(): Boolean

isContentNotEmpty

fun Message.isContentNotEmpty(): Boolean

isNotPlain

fun Message.isNotPlain(): Boolean

isNotPlain2

fun Message.isNotPlain2(): Boolean

isPlain

fun Message.isPlain(): Boolean

isPlain2

fun Message.isPlain2(): Boolean

repeat

fun Message.repeat(count: Int): MessageChain

repeat2

fun Message.repeat2(count: Int): MessageChain

sendTo

suspend fun <C : Contact> Message.sendTo(contact: C): MessageReceipt<C>

times

operator fun Message.times(count: Int): MessageChain

toForwardMessage

转换为 ForwardMessage

fun Message.toForwardMessage(sender: User, time: Int = currentTimeSeconds.toInt(), displayStrategy: DisplayStrategy = DisplayStrategy): ForwardMessage
fun Message.toForwardMessage(senderId: Long, senderName: String, time: Int = currentTimeSeconds.toInt(), displayStrategy: DisplayStrategy = DisplayStrategy): ForwardMessage

Inheritors

Image

自定义表情 (收藏的表情) 和普通图片.

interface Image : Message, MessageContent

MessageChain

消息链. 空的实现为 EmptyMessageChain

interface MessageChain : Message, Iterable<SingleMessage>

MessageSource

消息源, 它存在于 MessageChain 中, 用于表示这个消息的来源.

sealed class MessageSource : Message, MessageMetadata, ConstrainSingle<MessageSource>

QuoteReply

引用回复.

class QuoteReply : Message, MessageMetadata, ConstrainSingle<QuoteReply>

SingleMessage

interface SingleMessage : Message