Solved 如何获取信息链中的元素?
-
-
@zhou2008
你是不是直接把 MessageChain 显性转换为 At 然后获取 target 了…
不可能转换得了的,MessageChain 可以被理解为列表,而文字、At、图片等是列表里的元素下面这是我从文档里复制来的
处理富文本消息Mirai 不内置富文本消息的处理工具类。
MessageChain
实现接口List<SingleMessage>
,一个思路是遍历 list 并判断类型处理:for (element : messageChain) { if (element instanceof Image) { // 处理一个 Image } }
也可以像数组一样按下标随机访问:
SingleMessage element = messageChain.get(0); if (element instanceof Image) { // 处理一个 Image }
补:我在java中获取机器人是否被at的代码是这样的,可以参考下:
boolean isAt = false; for (SingleMessage s : event.getMessage()) { if (s instanceof At) { At at = (At) s; if (at.getTarget() == event.getBot().getId()) { isAt = true; break; } } } if (isAt) { // do sth. }
补:刚刚又翻了下文档发觉kt好香啊
val image: Image? = chain.findIsInstance<Image>()
-
我给的消息是@xxx的格式的
-
@zhou2008
你是不是直接把 MessageChain 显性转换为 At 然后获取 target 了…
不可能转换得了的,MessageChain 可以被理解为列表,而文字、At、图片等是列表里的元素下面这是我从文档里复制来的
处理富文本消息Mirai 不内置富文本消息的处理工具类。
MessageChain
实现接口List<SingleMessage>
,一个思路是遍历 list 并判断类型处理:for (element : messageChain) { if (element instanceof Image) { // 处理一个 Image } }
也可以像数组一样按下标随机访问:
SingleMessage element = messageChain.get(0); if (element instanceof Image) { // 处理一个 Image }
补:我在java中获取机器人是否被at的代码是这样的,可以参考下:
boolean isAt = false; for (SingleMessage s : event.getMessage()) { if (s instanceof At) { At at = (At) s; if (at.getTarget() == event.getBot().getId()) { isAt = true; break; } } } if (isAt) { // do sth. }
补:刚刚又翻了下文档发觉kt好香啊
val image: Image? = chain.findIsInstance<Image>()