如何获取MessageChain的KIND属性?
-
MessageChain序列化为JSON字符串时候可以得到一个KIND属性,是用来标记是群("GROUP")、好友("FRIEND")、群私聊会话("TEMP"),我想直接获取这个KIND属性,用来判断消息的类型,如何获取它?
-
首先你监听消息的时候就知道是来自哪里了
-
@hatmony 我并不只是想判断KIND属性,我想获取MessageChain的原生的值,因为原生的值不需要自己维护
-
你获取MessageChain的时候用的是全局监听?不然按作用域监听本身就已经把消息类型分开了
-
if (event instanceof GroupMessageEvent) { // 群聊天 GroupMessageEvent prototypeEvent = (GroupMessageEvent) event; doGroupMessageEvent(prototypeEvent); } else if (event instanceof GroupMessageSyncEvent) { GroupMessageSyncEvent prototypeEvent = (GroupMessageSyncEvent) event; doGroupMessageEvent(prototypeEvent); } else if (event instanceof FriendMessageEvent) { // 好友聊天 FriendMessageEvent prototypeEvent = (FriendMessageEvent) event; doFriendMessageEvent(prototypeEvent); } else if (event instanceof FriendMessageSyncEvent) { FriendMessageSyncEvent prototypeEvent = (FriendMessageSyncEvent) event; doFriendMessageEvent(prototypeEvent); } else if (event instanceof GroupTempMessageEvent) { // 群临时会话 GroupTempMessageEvent prototypeEvent = (GroupTempMessageEvent) event; doStrangerMessageEvent(prototypeEvent); } else if (event instanceof GroupTempMessageSyncEvent) { GroupTempMessageSyncEvent prototypeEvent = (GroupTempMessageSyncEvent) event; doStrangerMessageEvent(prototypeEvent); } else if (event instanceof StrangerMessageEvent) { // 陌生人聊天 StrangerMessageEvent prototypeEvent = (StrangerMessageEvent) event; doStrangerMessageEvent(prototypeEvent); } else if (event instanceof StrangerMessageSyncEvent) { StrangerMessageSyncEvent prototypeEvent = (StrangerMessageSyncEvent) event; doStrangerMessageEvent(prototypeEvent); } else { log.warn("未知的消息类型: " + event.getClass().getName()); for (Long superId : QqSessionManager.getSupers()) { QqSessionManager.getQqSession(superId).getFriend(superId).sendMessage(String.format("未知的消息类型:\n%s\nbotId:%d\nsenderId:%d\nsubjectId:%d\nfromId:%d\ntargetId:%d", event.getClass().getName(), source.getBotId(), source.getSender().getId(), source.getSubject().getId(), source.getFromId(), source.getTargetId())); } }
使用 [MessageChain.serializeToJsonString] 将 [MessageChain] 序列化为 JSON [String].
JSON [String] 包含一个kind属性,我想获取这个kind值,但我不想先将序列化为JSON字符串,然后反序列化为List获取,因为这是非常消耗性能,但又不想自己维护,因为可能出现未知的消息类型 -
不清楚为什么想通过MessageChain反过来获取对应的event类型?
event可以通过监听直接过滤出想要的事件类型,不需要拿全局的event进行逐一判断。 -
@hatmony kind属性有以下优势:
- 低耦合
- 高可靠
- 免维护
-
@2446694
感觉和阁下不在一个频道,我就此打住 -
java 比较麻烦
MessageSource source = event.getMessage().get(MessageSource.Key); MessageSourceAmender amender = new MessageSourceAmender(source); MessageSourceKind kind = amender.getKind();
-
MessageSource 有 getKind, 有可能是 2.15.0-M1 增加, 也有可能是 2.15.0-RC 即将增加