MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接
    1. 主页
    2. Chuanwise
    • 资料
    • 关注 0
    • 粉丝 0
    • 主题 2
    • 帖子 4
    • 最佳 2
    • 有争议的 0
    • 群组 0

    Chuanwise

    @Chuanwise

    苦逼大学生
    小明框架作者
    太学创始人

    3
    声望
    8
    资料浏览
    4
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录
    位置 西安 年龄 23

    Chuanwise 取消关注 关注

    Chuanwise 发布的最佳帖子

    • 小明:xiaoming - 基于 Mirai,方便上下文相关交互的机器人框架

      为了方便地实现上下文相关交互,我写了一个框架 xiaoming。用它实现上下文相关交互非常简单,实际使用效果:

      设置《小明使用协议》
      447f2344-c167-42a1-b59a-33e644cc2448-image.png

      初次使用小明时的强制协议认证(这个功能默认关闭)
      4be2c319-d4d5-4d9b-996d-0b03be4a34c9-image.png
      这说明小明成功接收到了第一次启动时的使用协议正文。

      这个功能对应的源代码是:

      user.sendPrivateMessage(getXiaomingBot().getTextManager().loadOrFail(config.getLicenseName()));
      user.sendPrivateMessage("如果你同意上述协议,请告诉我「同意」");
      
      // 这一句获得该用户的下一个输入
      final String nextInput = user.nextInput();
      if (Objects.equals(nextInput, "同意")) {
          user.sendMessage("你已经可以使用小明了,未来记得遵守我们的约定");
          licenceManager.agree(qq);
      } else {
          user.sendMessage("如果未来希望使用小明,仍然可以告诉我「使用小明」");
      }
      

      只需要一句简单的 nextInput()。小明会跟踪该用户的下一次输入,并把结果以该方法的返回值的形式送入方法内。

      除了文字,未来还会增加类似 user.nextEvent() 等 next 系列方法,实现类似于 你希望谁拥有这个权限呢?在xxx群戳一戳他吧 的功能,让交互更连贯起来。

      除此之外,小明还有方便的消息解析工具、权限管理、表情包管理、高频调用限制、输出缓冲以重定向功能等等。

      你也许不喜欢在注册指令时自己讨论参数的长度。小明提供了方便的指令机制。只需要使用特定的注解提取参数就可以了:

      public class CoreCommandInteractor extends CommandInteractorImpl {
          @Filter("(接待员|receiptionist)  {qq}")
          @RequirePermission("receiptionist")
          public void onReceiptionist(XiaomingUser user, @FilterParameter("qq") long qq) {
              // 接待员是小明内部和用户交互的线程。用户长时间不交互会自动销毁,也可以手动关闭。
              // 指令处理函数的内容
          }
      }
      

      小明遇到形如接待员 @一个人或者QQ号的指令,就会自动解析它的 qq,并注入该函数的参数中。

      除了可以注入字符串和 long 类型 QQ 外,还可以自己重写注入器,实现更加自由的自动参数解析。通过注解,小明也可以自动生成该类的指令格式说明,并且对用户显示其具有权限的部分:
      86b1fe95-2185-44ff-a7a1-5c4df8f4092b-image.png

      小明也是插件化的,目前基于小明的插件有:

      • lexicons

      这是一个词库插件,实际使用起来如图所示:
      b93d199b-9064-4e1b-863e-65e6e5630305-image.png

      未来还会写一个 Minecraft 服务器和 QQ 互通的插件。

      欢迎使用小明 (๑•̀ㅂ•́)و✧

      官方 QQ 群:1028959718
      作者:Chuanwise
      开源地址和文档:https://github.com/Chuanwise/xiaoming-bot/

      发布在 其他项目发布
      Chuanwise
      Chuanwise
    • RE: [萌新求助] [JS] 如何将收到的图片保存到文件
      public File saveImage(Image image) throws IOException {
              URL url = new URL(Image.queryUrl(image));
              final InputStream inputStream = url.openConnection().getInputStream();
      
              final File imageFile = new File(image.getImageId());
              if (!imageFile.isFile()) {
                  imageFile.createNewFile();
              }
      
              int packSize = 1024;
              byte[] bytes = new byte[packSize];
              int len = 0;
              try (OutputStream outputStream = new FileOutputStream(imageFile)) {
                  while ((len = inputStream.read(bytes)) != -1) {
                      outputStream.write(bytes, 0, len);
                  }
              }
              inputStream.close();
      
              return imageFile;
          }
      
      发布在 开发交流
      Chuanwise
      Chuanwise

    Chuanwise 发布的最新帖子

    • 怎么在私聊和临时会话中收发文件?

      (;′⌒`)

      发布在 开发交流
      Chuanwise
      Chuanwise
    • RE: [萌新求助] [JS] 如何将收到的图片保存到文件
      public File saveImage(Image image) throws IOException {
              URL url = new URL(Image.queryUrl(image));
              final InputStream inputStream = url.openConnection().getInputStream();
      
              final File imageFile = new File(image.getImageId());
              if (!imageFile.isFile()) {
                  imageFile.createNewFile();
              }
      
              int packSize = 1024;
              byte[] bytes = new byte[packSize];
              int len = 0;
              try (OutputStream outputStream = new FileOutputStream(imageFile)) {
                  while ((len = inputStream.read(bytes)) != -1) {
                      outputStream.write(bytes, 0, len);
                  }
              }
              inputStream.close();
      
              return imageFile;
          }
      
      发布在 开发交流
      Chuanwise
      Chuanwise
    • RE: 小明:xiaoming - 基于 Mirai,方便上下文相关交互的机器人框架

      最近一个朋友和我说用户在和小明交互的时候要分场合,我想想确实应该如此。所以最新的小明的上下文相关交互是和场合相关的。不同的群、临时会话和私聊中的上下文交互是隔离的。
      例如同时在私聊和群聊里反馈,它们的消息是分开的:
      7ab99e56-11fe-4632-ae71-3974e16d27b0-image.png
      与此同时,我也在私聊里反馈其他内容:
      07e1b6fc-9f51-4f5a-b036-46449e012424-image.png
      两边获得的消息互不影响。
      d9027153-8b0c-4f9c-907e-cb13cf0b94c4-image.png
      但接口只是增加了,实际编写插件时并不会感受到这一部分。线程之间的管理之类,小明已经做好了。
      当然,nextInput 也不再局限于当前场合下的下一条消息。它也可以获得指定场合的下一条消息。

      返回类型 原型
      String nextInput(...)
      String nextTempInput(...)
      String nextGroupInput(...)
      String nextPrivateInput(...)

      例如对指令:

      public class CommandInteractorTest extends CommandInteractorImpl {
          @Filter("(测试|test)")
          @RequirePermission("debug")
          public void onTest(XiaomingUser user) {
              final int group = 1028959718;
              user.sendMessage("请在群{}内发一句消息", group);
              user.sendMessage("你发的消息是:{}", user.nextGroupInput(group));
          }
      }
      

      下图左边是群聊,右边是私聊
      d6dbdfa6-242f-4f91-8cd6-150066e70a16-image.png

      未来还会继续增加 next 系列的方法,让上下文更加连贯。

      发布在 其他项目发布
      Chuanwise
      Chuanwise
    • 小明:xiaoming - 基于 Mirai,方便上下文相关交互的机器人框架

      为了方便地实现上下文相关交互,我写了一个框架 xiaoming。用它实现上下文相关交互非常简单,实际使用效果:

      设置《小明使用协议》
      447f2344-c167-42a1-b59a-33e644cc2448-image.png

      初次使用小明时的强制协议认证(这个功能默认关闭)
      4be2c319-d4d5-4d9b-996d-0b03be4a34c9-image.png
      这说明小明成功接收到了第一次启动时的使用协议正文。

      这个功能对应的源代码是:

      user.sendPrivateMessage(getXiaomingBot().getTextManager().loadOrFail(config.getLicenseName()));
      user.sendPrivateMessage("如果你同意上述协议,请告诉我「同意」");
      
      // 这一句获得该用户的下一个输入
      final String nextInput = user.nextInput();
      if (Objects.equals(nextInput, "同意")) {
          user.sendMessage("你已经可以使用小明了,未来记得遵守我们的约定");
          licenceManager.agree(qq);
      } else {
          user.sendMessage("如果未来希望使用小明,仍然可以告诉我「使用小明」");
      }
      

      只需要一句简单的 nextInput()。小明会跟踪该用户的下一次输入,并把结果以该方法的返回值的形式送入方法内。

      除了文字,未来还会增加类似 user.nextEvent() 等 next 系列方法,实现类似于 你希望谁拥有这个权限呢?在xxx群戳一戳他吧 的功能,让交互更连贯起来。

      除此之外,小明还有方便的消息解析工具、权限管理、表情包管理、高频调用限制、输出缓冲以重定向功能等等。

      你也许不喜欢在注册指令时自己讨论参数的长度。小明提供了方便的指令机制。只需要使用特定的注解提取参数就可以了:

      public class CoreCommandInteractor extends CommandInteractorImpl {
          @Filter("(接待员|receiptionist)  {qq}")
          @RequirePermission("receiptionist")
          public void onReceiptionist(XiaomingUser user, @FilterParameter("qq") long qq) {
              // 接待员是小明内部和用户交互的线程。用户长时间不交互会自动销毁,也可以手动关闭。
              // 指令处理函数的内容
          }
      }
      

      小明遇到形如接待员 @一个人或者QQ号的指令,就会自动解析它的 qq,并注入该函数的参数中。

      除了可以注入字符串和 long 类型 QQ 外,还可以自己重写注入器,实现更加自由的自动参数解析。通过注解,小明也可以自动生成该类的指令格式说明,并且对用户显示其具有权限的部分:
      86b1fe95-2185-44ff-a7a1-5c4df8f4092b-image.png

      小明也是插件化的,目前基于小明的插件有:

      • lexicons

      这是一个词库插件,实际使用起来如图所示:
      b93d199b-9064-4e1b-863e-65e6e5630305-image.png

      未来还会写一个 Minecraft 服务器和 QQ 互通的插件。

      欢迎使用小明 (๑•̀ㅂ•́)و✧

      官方 QQ 群:1028959718
      作者:Chuanwise
      开源地址和文档:https://github.com/Chuanwise/xiaoming-bot/

      发布在 其他项目发布
      Chuanwise
      Chuanwise