MiraiForum

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

    Mirai闪照破解

    技术交流板块
    3
    5
    539
    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.
    • hujiayucc
      hujiayucc last edited by

      Mirai实现闪照破解

      直接上代码:

      public class Event extends SimpleListenerHost {
          /**
           * 私聊模板
           */
          @EventHandler
          private ListeningStatus FlashImage(FriendMessageEvent event) {
              String msg = event.getMessage().contentToString();
              if (msg.equals("[闪照]")) {
                  //这里切记不要用 contentToString() 转码
                  String flashid = event.getMessage().toString();
                  //获取闪照的ImageID,明白意思就行,下面群聊的注释我就不写了
                  //Tool类代码我自己写的,待会下面贴源码
                  flashid = Tool.getSubst(flashid, "flash:", "]");
                  //用ImageID发送一次图片得到Image元素消息
                  Image image = Image.fromId(flashid);
                  //用 MessageChainBuilder() 构建消息
                  MessageChain messages = new MessageChainBuilder().append("你发送了一个闪照\n").append(image).build();
                  //发送消息
                  event.getSender().sendMessage(messages);
              }
              //返回继续监听
              return ListeningStatus.LISTENING;
          }
      
          /**
           * 群聊模板
           */
          @EventHandler
          private ListeningStatus FlashImage(GroupMessageEvent event) {
              String msg = event.getMessage().contentToString();
              if (msg.equals("[闪照]")) {
                  long qq = event.getSender().getId();
                  String flashid = event.getMessage().toString();
                  flashid = Tool.getSubst(flashid, "flash:", "]");
                  Image image = Image.fromId(flashid);
                  MessageChain messages = new MessageChainBuilder().append(new At(qq))
                          .append("(").append(String.valueOf(qq)).append(") ")
                          .append("发送了一个闪照\n").append(image).build();
                  event.getGroup().sendMessage(messages);
              }
              return ListeningStatus.LISTENING;
          }
      }
      

      Tool.java

      public class Tool {
          /**
           * 取右边文本
           * @param str 原文本
           * @param leftStr 左边文本
           * @return 右边文本
           */
          public static String getRights(String str, String leftStr) {
              return str.substring(str.indexOf(leftStr) + leftStr.length());
          }
      
          /**
           * 取左边文本
           * @param str 原文本
           * @param rightStr 左边文本
           * @return 左边文本
           */
          public static String getLefts(String str, String rightStr) {
              return str.substring(0, str.indexOf(rightStr));
          }
      
          /**
           * 取中间文本
           * @param str 原文本
           * @param leftStr 左边文本
           * @param rightStr 右边文本
           * @return 中间文本
           */
          public static String getSubst(String str, String leftStr, String rightStr) {
              String temp = getRights(str,leftStr);
              return getLefts(temp,rightStr);
          }
      }
      

      效果图

      效果图

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

        在 event.getMessage() 里取 FlashImage 实例是比处理 MiraiCode 更好的做法

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

              @EventHandler
              public void onFriendMessage(FriendMessageEvent event){
                  Optional<FlashImage> flashImage = event.getMessage().stream().filter(it -> it instanceof FlashImage).findFirst()
                  if (flashImage.isPresent()) {
                      Image image = flashImage.get().getImage();
                      event.getSender().sendMessage(new PlainText("你发送了一张闪照\n").plus(image));
                  }
              }
          
          hujiayucc 1 Reply Last reply Reply Quote 1
          • hujiayucc
            hujiayucc @MrXiaoM last edited by

            @MrXiaoM 谢谢,学习到了

            1 Reply Last reply Reply Quote 0
            • M
              MX233 ⭐2021⭐ last edited by

              相关实现
              https://github.com/MX233/AntiRecall

              1 Reply Last reply Reply Quote 0
              • 1 / 1
              • First post
                Last post
              Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact