MiraiForum

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

    未解决 如何获取在mirai-console命令行输入的原始命令

    开发交流
    2
    4
    391
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • lc6a
      lc6a 最后由 lc6a 编辑

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

      @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: 
      

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

      1 条回复 最后回复 回复 引用 0
      • cssxsh
        cssxsh 最后由 编辑

        你应该用热指令 rawCommand

        1 条回复 最后回复 回复 引用 0
        • lc6a
          lc6a 最后由 编辑

          3种指令都试过。。。

          lc6a 1 条回复 最后回复 回复 引用 0
          • lc6a
            lc6a @lc6a 最后由 编辑

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

                @Handler
                fun CommandSender.handle(vararg args: String) {
                    val command = buildString { args.forEach { append(it).append(' ') } }.trimEnd()
                    execSmCommand(command) {
                        runBlocking {
                            sendMessage(it)
                        }
                    }
                }
            
            1 条回复 最后回复 回复 引用 0
            • 1 / 1
            • First post
              Last post
            Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact