MessageSource
表示聊天中的一条消息的定位信息, 即消息源.
一个消息源可用于定位一条存在于服务器中的消息, 因此可用来撤回或引用该消息
消息源可存在于 MessageChain 中, 用于表示这个消息的来源, 也可以用来分辨 MessageChain.
消息源分为在线消息源 OnlineMessageSource 和离线消息源 OfflineMessageSource.
属性组成
MessageSource 由以下属性组成:
三个定位属性 ids, internalId, time
发送人 ID fromId
收信人 ID targetId
原消息内容 originalMessage
官方客户端通过这三个定位属性来准确定位消息, 撤回和引用回复都是如此 (有这三个属性才可以精确撤回和引用某个消息).
即使三个定位属性就可以知道原消息是哪一条, 但服务器和官方客户端都实现为读取 originalMessage 的内容. 也就是说, 如果引用一个 MessageSource, 定位属性只会被用来支持跳转到原消息, 引用中显示的被引用消息内容只取决于 originalMessage. 可以通过修改 originalMessage 来达到显示的内容与跳转内容不符合的效果. 但一般没有必要这么做.
获取消息源实例
来自 MessageEvent.message 的 MessageChain 总是包含在线消息源 OnlineMessageSource. 可通过 MessageChain.get 获取 MessageSource:
// Kotlin
val source: MessageSource? = chain[MessageSource]
val notNull: MessageSource = chain.source // 可能抛出 NoSuchElementExceptionContent copied to clipboard// Java
MessageSource source = chain.get(MessageSource.Key);Content copied to clipboard构造离线消息源: IMirai.constructMessageSource
使用构建器构造: MessageSourceBuilder
参阅 OnlineMessageSource 或 OfflineMessageSource 可获得更详细的获取实例的方式.
"修改" 一个 MessageSource
MessageSource 是不可变的. 因此不能修改其中属性, 但可以通过 MessageSource.copyAmend 或者 MessageSourceBuilder.allFrom 来复制一个.
MessageSource newSource = new MessageSourceBuilder()
.allFrom(source) // 从 source 继承所有数据
.message(new PlainText("aaa")) // 覆盖消息
.build();
使用
对于来自 MessageEvent.message 的 MessageChain, 总是包含 MessageSource. 因此也可以对这样的 MessageChain 进行 引用回复 或 撤回.
获取有关 Bot 实例
调用 MessageSource.bot 或 MessageSource.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
引用这条消息, 创建 MessageChain
Inheritors
Functions
判断内容是否与 another 相等.
判断内容是否与 another 相等即 this
与 another 的 contentToString 相等.
判断内容是否与 another 相等即 this
与 another 的 contentToString 相等.
转为接近官方格式的字符串, 即 "内容". 如 At(member) + "test"
将转为 "@QQ test"
.
复制这个消息源, 并以 block 修改
将 this
和 tail 连接.
当消息内容为空白时返回 true
.
当消息内容为空时返回 true
.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
创建一个消息链, 将 another 连接到这个消息的尾部. 这不会改变本 Message, 而是会创建新的 MessageChain 实例. 返回的 MessageChain 实例的第一个元素为本 Message, 随后为按顺序的 another 中的元素.
引用这条消息.
在一段时间后撤回这条消息.
转换为 ForwardMessage
Properties
获取此消息源的相关 Bot.
获取此消息源的相关 Bot.
内部 ids. 仅用于协议模块使用
当 originalMessage 已被初始化后返回 true
.
用于判断是否为同一种元素的 MessageKey. 使用多态类型 MessageKey 最上层的 MessageKey.
消息种类
该消息源指向的原消息的内容.