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
Types
Functions
判断内容是否与 another 相等.
判断内容是否与 another 相等即 this
与 another 的 contentToString 相等.
判断内容是否与 another 相等即 this
与 another 的 contentToString 相等.
转为最接近官方格式的字符串, 即 "内容". 如 At(member) + "test"
将转为 "@群名片 test"
.
将 this
和 tail 连接.
创建一个消息链, 将 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 中的元素.
Properties
当 originalMessage 已被初始化后返回 true
.
用于判断是否为同一种元素的 MessageKey. 使用多态类型 MessageKey 最上层的 MessageKey.
Inheritors
Extensions
获取此消息源的相关 Bot.
获取此消息源的相关 Bot.
复制这个消息源, 并以 block 修改
引用这条消息.
在一段时间后撤回这条消息.