MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    Mirai闪照破解

    技术交流板块
    3
    5
    532
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • hujiayucc
      hujiayucc 最后由 编辑

      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 条回复 最后回复 回复 引用 0
      • MrXiaoM
        MrXiaoM 童心未泯 最后由 编辑

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

        MrXiaoM 1 条回复 最后回复 回复 引用 0
        • MrXiaoM
          MrXiaoM 童心未泯 @MrXiaoM 最后由 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 条回复 最后回复 回复 引用 1
          • hujiayucc
            hujiayucc @MrXiaoM 最后由 编辑

            @MrXiaoM 谢谢,学习到了

            1 条回复 最后回复 回复 引用 0
            • M
              MX233 ⭐2021⭐ 最后由 编辑

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

              1 条回复 最后回复 回复 引用 0
              • 1 / 1
              • First post
                Last post
              Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact