MiraiForum

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

    lc6a 发布的帖子

    • RE: SpringMirai 集成mirai-console的可自定义可扩展kotlin机器人开发框架/启动器

      版本更新:2.11.1-dev1,更新mirai版本到2.11.1。
      https://github.com/lc6a/spring_mirai/releases/tag/2.11.1-dev

      发布在 其他项目发布
      lc6a
      lc6a
    • RE: 插件里Spring的AnnotationConfigApplicationContext扫描不到bean

      @lc6a 在 插件里Spring的AnnotationConfigApplicationContext扫描不到bean 中说:

      @hundun000 你好,我也是使用Spring框架做机器人项目,我比较好奇你打包的jar包具体内容。能否发一份你打包的使用Spring的插件jar包?如果你当前项目不方便公布的话,能否用spring写个hello world的插件,然后打包发我一份?如果论坛不方便发送的话,我QQ1952511149。非常感谢!

      我之前打算解决这个问题的,被一些事情耽搁了。你如果能顺便提供源码就更好了,我可能会尝试解决此问题。如果我解决了,我可以跟你分享分享。

      发布在 开发交流
      lc6a
      lc6a
    • RE: 插件里Spring的AnnotationConfigApplicationContext扫描不到bean

      @hundun000 你好,我也是使用Spring框架做机器人项目,我比较好奇你打包的jar包具体内容。能否发一份你打包的使用Spring的插件jar包?如果你当前项目不方便公布的话,能否用spring写个hello world的插件,然后打包发我一份?如果论坛不方便发送的话,我QQ1952511149。非常感谢!

      发布在 开发交流
      lc6a
      lc6a
    • RE: SpringMirai 集成mirai-console的可自定义可扩展kotlin机器人开发框架/启动器

      @liujiahua123123 不好意思,写的时候没有过多考虑,确实不妥,目前已经修改。如果还有其他存在问题,可以提ISSUE,我会第一时间处理。

      发布在 其他项目发布
      lc6a
      lc6a
    • RE: SpringMirai 集成mirai-console的可自定义可扩展kotlin机器人开发框架/启动器

      刚刚添加了自动接受加好友、加群的功能,并且挂了一个机器人在服务器。
      大家可以加我的机器人为好友或者拉我的机器人去你们的群玩耍,账号:2120906525
      有什么好玩的插件想要该机器人加载都可以分享,帮忙代挂机器人也是可以的,也欢迎大家交流开发经验。

      发布在 其他项目发布
      lc6a
      lc6a
    • RE: 架构设计:抽离出“纯bot逻辑”?

      可以看看我的拙作:

      https://mirai.mamoe.net/topic/317/springmirai-集成mirai-console的可自定义可扩展kotlin机器人开发框架-启动器

      不过目前结构也存在一些问题,有重构的打算。
      如果你也是基于springboot开发,欢迎交流经验!
      我认为:

      1. 可以对设计进行分层次抽象,例如分为jvm全局、插件级别、指令级别3层。
      2. 定义过滤器模块,可以编写一个个过滤器,各过滤器可以设计为独立平等关系,也可设置为层级关系(例如伪代码:过滤器AtMeFilter(true)的前提是过滤器EventFilter(MessageEvent::class)),但过滤器最好不直接跟机器人功能耦合,提供默认绑定关系即可,应该让用户能够运行时动态绑定、解绑过滤器与功能(点名批评自己的框架,使用注解将过滤器和功能静态绑定,无法动态更改)。
      3. 定义机器人功能模块,仅仅包含机器人逻辑,数据来源由框架提供(参数注入),消息发送也抽象隔离开。
      4. AOP,面向切面编程能够方便的在机器人逻辑前后添加通用逻辑,例如返回值如何作为消息发送回去。
      5. 至于同时维护基于core和mirai-console的两个版本,我觉得Him188大佬说得对,直接将mirai-console作为依赖添加到项目即可,项目提供main和plugin两个入口,我的SpringMirai项目就是这样做的。
      发布在 开发交流
      lc6a
      lc6a
    • SpringMirai 集成mirai-console的可自定义可扩展kotlin机器人开发框架/启动器
      • 类Spring的开发体验
      • 控制器、拦截器、类AOP处理器
      • 99%的功能可自定义
      • 具备mirai-console所有功能
      • 包含Web管理端,因此可以视为继mcl、mirai-compose后又一个启动器

      github仓库地址

      gitee仓库地址

      放几个截图:
      f0231ef1-4050-4794-ada3-78cb4c09065c-image.png

      概览

      机器人管理

      功能管理

      过滤

      功能控制面板

      插件管理

      插件控制面板

      发布在 其他项目发布
      lc6a
      lc6a
    • RE: 如何获取在mirai-console命令行输入的原始命令

      查看源码发现可以用变长参数或者数组来实现变相还原内容:

          @Handler
          fun CommandSender.handle(vararg args: String) {
              val command = buildString { args.forEach { append(it).append(' ') } }.trimEnd()
              execSmCommand(command) {
                  runBlocking {
                      sendMessage(it)
                  }
              }
          }
      
      发布在 开发交流
      lc6a
      lc6a
    • RE: 如何获取在mirai-console命令行输入的原始命令

      3种指令都试过。。。

      发布在 开发交流
      lc6a
      lc6a
    • 如何获取在mirai-console命令行输入的原始命令

      我有另外一套指令体系,我想注册一个指令来执行那个体系的指令,代码如下:

      @Component
      class SmCommandInvoker: RawCommand(
          SpringMiraiStartPlugin, primaryName,
          description = "执行SpringMirai指令"
      ) {
      
          companion object {
              private const val primaryName = "sm"
          }
      
          override suspend fun CommandSender.onCommand(message: MessageChain) {
              val command = message.content.substringAfter(primaryName).trimStart()
              val logger = MiraiLogger.create("sm")
              logger.info("message: ${message.content}")
              logger.info("command: $command")
              execSmCommand(command) {
                  runBlocking {
                      sendMessage(it)
                  }
              }
          }
      }
      

      其中execSmCommand定义如下:

      /**
       * 执行sm指令
       * @param line 一行指令
       * @param fn 需要回复消息时的回调
       */
      fun execSmCommand(line: String, fn: (String) -> Unit)
      

      输出如下:

      > /sm 权限 我的权限
      2021-06-17 23:54:05 I/stdout: 2021-06-17 23:54:05.925  INFO 12568 --- [atcher-worker-2] sm  : message: 权限我的权限
      2021-06-17 23:54:05 I/stdout: 
      2021-06-17 23:54:05 I/stdout: 2021-06-17 23:54:05.925  INFO 12568 --- [atcher-worker-2] sm  : command: 权限我的权限
      2021-06-17 23:54:05 I/stdout: 
      

      很显然,“权限”和“我的权限”之间的空格被去掉了,而在我的指令体系中必须要这个空格,所以导致我的指令无法正确运行,请问如何解决此问题?

      发布在 开发交流
      lc6a
      lc6a
    • RE: 手动加载的插件不会自动插件数据持久化

      是我自己写错了,打扰了

      发布在 开发交流
      lc6a
      lc6a
    • 手动加载的插件不会自动插件数据持久化

      我的主函数如下:

      fun main(args: Array<String>) {
          runArgs = args
          MiraiConsoleTerminalLoader.startAsDaemon()
          SpringMiraiStartPlugin.load()
          SpringMiraiStartPlugin.enable()
      }
      
      

      插件数据定义如下:

      @Component
      class PermissionDao @Autowired constructor(config: Config): AutoSavePluginData("permission") {
          val permissions: MutableMap<Long, MutableList<String>> by value()
      
          private val logger = LoggerFactory.getLogger(PermissionDao::class.java)
      
          init {
              val root = config.rootUserId
              initKey(root);
              if (permissions[root].isNullOrEmpty()) {
                  logger.warn("当前没添加root用户权限,自动添加中")
                  permissions[root]!!.add(PermissionService.root)
              }
          }
      }
      

      虽然数据在内存中没有任何问题,但不会持久化到文件(data目录下甚至没有这个插件的目录)。
      是我操作不对还是说需要额外进行处理?如何处理?

      发布在 开发交流
      lc6a
      lc6a
    • RE: 求助一下想要实现以下图片的功能该怎么做

      你这个图片的功能看起来就是一个取码啊

      发布在 使用交流
      lc6a
      lc6a
    • RE: 求助:插件优先级配置

      事件监听注册时可以设定优先级,高优先级的监听器可以拦截事件。
      但这个优先级一般在代码里面固定了,是否拦截事件也是代码决定的,很少有插件从配置文件决定这两个逻辑。
      所以你应该需要修改课表插件的代码。

      发布在 使用交流
      lc6a
      lc6a
    • RE: mirai有可能实现20人以下的群不自动接受加群邀请吗

      我忙猜一下这个20人以下自动接受加群在服务器上就执行了,这样的话无法拒绝。不过能变相实现,即加群后立马退群

      发布在 开发交流
      lc6a
      lc6a
    • RE: [DEPRECATED] mirai-compose:跨平台、图形化、易安装的mirai-console客户端

      能否指定登录协议

      发布在 项目发布
      lc6a
      lc6a
    • 哭了,mirai官网竟然会算查重

      0WZQ0S~L5.jpg

      发布在 摸鱼区
      lc6a
      lc6a
    • RE: Mirai接入图灵机器人

      @nambers 目录分隔符不合适用固定的''。此外,加载配置文件应该不在mcl里面,而是mirai console。

      发布在 插件发布
      lc6a
      lc6a
    • 1
    • 2
    • 1 / 2