MessageSource

表示聊天中的一条消息的定位信息, 即消息源.

一个消息源可用于定位一条存在于服务器中的消息, 因此可用来撤回引用该消息

消息源可存在于 MessageChain 中, 用于表示这个消息的来源, 也可以用来分辨 MessageChain.

消息源分为在线消息源 OnlineMessageSource 和离线消息源 OfflineMessageSource.

属性组成

MessageSource 由以下属性组成:

官方客户端通过这三个定位属性来准确定位消息, 撤回和引用回复都是如此 (有这三个属性才可以精确撤回和引用某个消息).

即使三个定位属性就可以知道原消息是哪一条, 但服务器和官方客户端都实现为读取 originalMessage 的内容. 也就是说, 如果引用一个 MessageSource, 定位属性只会被用来支持跳转到原消息, 引用中显示的被引用消息内容只取决于 originalMessage. 可以通过修改 originalMessage 来达到显示的内容与跳转内容不符合的效果. 但一般没有必要这么做.

获取消息源实例

参阅 OnlineMessageSourceOfflineMessageSource 可获得更详细的获取实例的方式.

"修改" 一个 MessageSource

MessageSource 是不可变的. 因此不能修改其中属性, 但可以通过 MessageSource.copyAmend 或者 MessageSourceBuilder.allFrom 来复制一个.

MessageSource newSource = new MessageSourceBuilder()
.allFrom(source) // 从 source 继承所有数据
.message(new PlainText("aaa")) // 覆盖消息
.build();

使用

消息源可用于 引用回复撤回.

对于来自 MessageEvent.messageMessageChain, 总是包含 MessageSource. 因此也可以对这样的 MessageChain 进行 引用回复撤回.

获取有关 Bot 实例

调用 MessageSource.botMessageSource.botOrNull 来获取有关 Bot 实例.

Kotlin 示例

val source: MessageSource = ...
source.recall() // 通过 MessageSource 撤回

val event: MessageEvent = ...
event.message.recall() // 也可以通过来自服务器的 [MessageChain] 撤回, 因为这些 chain 包含 [MessageSource]

Java 示例

MessageSource source = ...
MessageSource.recall(source); // 通过 MessageSource 撤回

MessageEvent event = ...
MessageSource.recall(event.message); // 也可以通过来自服务器的 [MessageChain] 撤回, 因为这些 chain 包含 [MessageSource]

See also

Inheritors

Types

Link copied to clipboard
Link copied to clipboard
object Serializer : KSerializer<MessageSource>

Functions

Link copied to clipboard
open fun contentEquals(another: String, ignoreCase: Boolean = false): Boolean

判断内容是否与 another 相等.

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

判断内容是否与 another 相等即 thisanothercontentToString 相等.

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

判断内容是否与 another 相等即 thisanothercontentToString 相等.

Link copied to clipboard
abstract fun contentToString(): String

转为接近官方格式的字符串, 即 "内容". 如 At(member) + "test" 将转为 "@QQ test".

Link copied to clipboard

复制这个消息源, 并以 block 修改

Link copied to clipboard

thistail 连接.

Link copied to clipboard

当消息内容为空白时返回 true.

Link copied to clipboard

当消息内容为空时返回 true.

Link copied to clipboard
open operator fun plus(another: Array<out Message>): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: CharSequence): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: String): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

@JvmName(name = "plusIterableString")
open operator fun plus(another: Iterable<String>): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: Iterable<Message>): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: Sequence<Message>): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: Message): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: MessageChain): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

open operator fun plus(another: SingleMessage): MessageChain

创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.

Link copied to clipboard
inline suspend operator fun Message.plus(another: Flow<Message>): MessageChain

another 按顺序连接到这个消息的尾部.

Link copied to clipboard

引用这条消息.

Link copied to clipboard

Bot 身份撤回该消息源指向的存在于服务器上的消息. 可撤回自己 2 分钟内发出的消息, 和任意时间的群成员的消息.

Link copied to clipboard

在一段时间后撤回这条消息.

Link copied to clipboard
inline fun Message.repeat(count: Int): MessageChain

将此消息元素按顺序重复 count 次.

Link copied to clipboard
inline suspend fun <C : Contact> Message.sendTo(contact: C): MessageReceipt<C>

this 发送给指定联系人

Link copied to clipboard
inline operator fun Message.times(count: Int): MessageChain

将此消息元素按顺序重复 count 次.

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

转换为 ForwardMessage

Link copied to clipboard
@JvmName(name = "newChain")
fun Message.toMessageChain(): MessageChain
Link copied to clipboard
abstract override fun toString(): String

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

Properties

Link copied to clipboard

获取此消息源的相关 Bot.

Link copied to clipboard
abstract val botId: Long

所属 Bot.id

Link copied to clipboard

获取此消息源的相关 Bot.

Link copied to clipboard
Link copied to clipboard
abstract val fromId: Long

发送人用户 ID.

Link copied to clipboard
abstract val ids: IntArray

消息 ids (序列号). 在获取失败时 (概率很低) 为空数组.

Link copied to clipboard
abstract val internalIds: IntArray

内部 ids. 仅用于协议模块使用

Link copied to clipboard

originalMessage 已被初始化后返回 true.

Link copied to clipboard

用于判断是否为同一种元素的 MessageKey. 使用多态类型 MessageKey 最上层的 MessageKey.

Link copied to clipboard
Link copied to clipboard

该消息源指向的原消息的内容.

Link copied to clipboard
abstract val targetId: Long

消息发送目标用户或群号码.

Link copied to clipboard
abstract val time: Int

发送时间时间戳, 单位为秒.