(;′⌒`)
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; }
-
RE: 小明:xiaoming - 基于 Mirai,方便上下文相关交互的机器人框架
最近一个朋友和我说用户在和小明交互的时候要分场合,我想想确实应该如此。所以最新的小明的上下文相关交互是和场合相关的。不同的群、临时会话和私聊中的上下文交互是隔离的。
例如同时在私聊和群聊里反馈,它们的消息是分开的:
与此同时,我也在私聊里反馈其他内容:
两边获得的消息互不影响。
但接口只是增加了,实际编写插件时并不会感受到这一部分。线程之间的管理之类,小明已经做好了。
当然,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)); } }
下图左边是群聊,右边是私聊
未来还会继续增加
next
系列的方法,让上下文更加连贯。 -
小明:xiaoming - 基于 Mirai,方便上下文相关交互的机器人框架
为了方便地实现上下文相关交互,我写了一个框架
xiaoming
。用它实现上下文相关交互非常简单,实际使用效果:设置《小明使用协议》
初次使用小明时的强制协议认证(这个功能默认关闭)
这说明小明成功接收到了第一次启动时的使用协议正文。这个功能对应的源代码是:
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 外,还可以自己重写注入器,实现更加自由的自动参数解析。通过注解,小明也可以自动生成该类的指令格式说明,并且对用户显示其具有权限的部分:
小明也是插件化的,目前基于小明的插件有:
这是一个词库插件,实际使用起来如图所示:
未来还会写一个 Minecraft 服务器和 QQ 互通的插件。
欢迎使用小明 (๑•̀ㅂ•́)و✧
官方 QQ 群:
1028959718
作者:Chuanwise
开源地址和文档:https://github.com/Chuanwise/xiaoming-bot/