Posts made by MrXiaoM
-
获取回复消息(QuoteReply)指向原文的实现思路
总所周知,腾讯服务器给你返回的 QuoteReply 的源消息并不是富文本消息,也就是说,图片会“退化”为
[图片]
等等。如果我们想做回复消息搜图之类的功能,这给我们带来了比较多的麻烦。但是,我们可以取到源消息的 MessageSource,只要你本地存了聊天记录,就能够通过 MessageSource 获取相应消息。按照这个思路,我们只要跟QQ客户端一样,把消息存到本地,需要时获取即可。
具体实现
本帖中将使用 Mirai Hibernate Plugin 插件储存聊天记录,演示获取回复消息原文的方法。
引用依赖
// build.gradle(.kts) repositories { mavenCentral() } dependencies { compileOnly("xyz.cssxsh.mirai:mirai-hibernate-plugin:依赖版本") } // hibernate 6 和 HikariCP 5 需要 jdk11 mirai { jvmTarget = JavaVersion.VERSION_11 }
//author("MrXiaoM") // 在主类插件信息处声明插件依赖关系 dependsOn("xyz.cssxsh.mirai.plugin.mirai-hibernate-plugin", false)
Kotlin
val QuoteReply.originalMessageFromLocal: MessageChain get() = MiraiHibernateRecorder[source].firstOrNull()?.toMessageChain() ?: source.originalMessage // 使用示例 @EventHandler fun GroupMessageEvent.listen() { // 检测回复消息 message[QuoteReply.Key]?.run { val original = originalMessageFromLocal // do sth. } }
Java
public static MessageChain getOriginalMessageFromLocal(QuoteReply quote) { Optional<MessageRecord> record = MiraiHibernateRecorder.INSTANCE.get(quote.getSource()).stream().findFirst(); return record.map(MessageRecord::toMessageChain).orElseGet(() -> quote.getSource().getOriginalMessage()); } // 使用示例 @EventHandler public void onGroupMessage(GroupMessageEvent event) { // 检测回复消息 QuoteReply quote = event.getMessage().get(QuoteReply.Key); if (quote != null) { MessageChain original = getOriginalMessageFromLocal(quote); // do sth. } }
-
RE: 给Mirai娘的新衣服!
嘿嘿 Mirai Chan 🤤🤤🤤嘿嘿 Mirai Chan 🤤🤤🤤嘿嘿 Mirai Chan 🤤🤤🤤嘿嘿 Mirai Chan 🤤🤤🤤嘿嘿 Mirai Chan 🤤🤤🤤嘿嘿 Mirai Chan 🤤🤤🤤
-
RE: CommandYouWant —— 重定向其他插件的命令
@SyuueenN 目前不能,虽然可以改成一个命令多种触发方式,但目前我没有时间进行开发,所有项目停更。
要加这个功能也要等我解决完这个插件里还存在的一些逻辑错误才能加了