Closed Kvi121 closed 1 year ago
可以参考
@Listener
public void listen(GroupMessageEvent event) {
// 第一个消息
MessageReceipt receipt = event.getGroup().sendBlocking("hello");
// 引用回复对象需要使用到mirai的 Message Source,因此需要确保消息回执是mirai的消息回执。
if (receipt instanceof SimbotMiraiMessageReceipt miraiMessageReceipt) {
OnlineMessageSource.Outgoing source = miraiMessageReceipt.getReceipt().getSource();
// 构建引用回复对象
MiraiQuoteReply quoteReply = new MiraiQuoteReply(source);
// 第二个消息
Messages messages = new MessagesBuilder().append(quoteReply).append("hello2").build();
event.getGroup().sendBlocking(messages);
}
}
或直接监听mirai组件的专属事件:
@Listener
public void listen(MiraiGroupMessageEvent event) {
// 第一个消息
SimbotMiraiMessageReceipt<Group> receipt = event.getGroup().sendBlocking("hello");
OnlineMessageSource.Outgoing source = receipt.getReceipt().getSource();
MiraiQuoteReply quoteReply = new MiraiQuoteReply(source);
Messages messages = new MessagesBuilder().append(quoteReply).append("hello2").build();
// 第二个带引用的消息
event.getGroup().sendBlocking(messages);
}
如果希望序列化ID后引用,可以参考
@Listener
public void listen( GroupMessageEvent event) {
// 第一个消息
MessageReceipt receipt = event.getGroup().sendBlocking("hello");
if (receipt instanceof SingleMessageReceipt singleMessageReceipt) {
// 如果回执为单消息回执(mirai组件中目前为止所有的消息回执都是'单消息回执'
ID id = singleMessageReceipt.getId();
String idStr = id.toString();
// 保存此ID
// ...
// 假设此处又从某处读取来了此ID
CharSequenceID id1 = Identifies.ID(idStr);
MiraiQuoteReply quoteReply = new MiraiQuoteReply(id1);
Messages messages = new MessagesBuilder().append(quoteReply).append("hello2").build();
// 发送带引用的消息
event.getGroup().sendBlocking(messages);
}
}
需要注意的是,序列化ID再读取ID字符串构建
MiraiQuoteReply
的形式不如前两者稳定。
谢谢,解决了 序列化ID再读取ID字符串构建 这种你说的不稳定是会导致消息发不出去吗? 还是会有其他什么问题?
很奇怪,用序列化ID后引用后, 手机端不会显示引用, 并且pc端引用的格式也有点问题
序列化ID再读取ID字符串构建 这种你说的不稳定是会导致消息发不出去吗? 还是会有其他什么问题?
此ID的序列化并非官方自带的序列化方案因此无法保证可用性或者可能存在缺陷,你说的显示格式有问题就算是其中一种问题
版本号