MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    Solved 如何获取信息链中的元素?

    开发交流
    2
    3
    275
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Z
      zhou2008 摸鱼 last edited by zhou2008

      e8a7ab7d-02aa-46fc-81a1-9088190f9679-image.png
      11bfe128-b770-4375-855c-b1bd9af6a8ae-image.png
      按照(https://github.com/mamoe/mirai/blob/dev/docs/Messages.md)的方法失败

      MrXiaoM 1 Reply Last reply Reply Quote 0
      • MrXiaoM
        MrXiaoM 童心未泯 @zhou2008 last edited by MrXiaoM

        @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>()
        
        1 Reply Last reply Reply Quote 1
        • Z
          zhou2008 摸鱼 last edited by

          我给的消息是@xxx的格式的

          1 Reply Last reply Reply Quote 0
          • MrXiaoM
            MrXiaoM 童心未泯 @zhou2008 last edited by MrXiaoM

            @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>()
            
            1 Reply Last reply Reply Quote 1
            • 1 / 1
            • First post
              Last post
            Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact