未解决 如何获取在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:
很显然,“权限”和“我的权限”之间的空格被去掉了,而在我的指令体系中必须要这个空格,所以导致我的指令无法正确运行,请问如何解决此问题?
-
你应该用热指令 rawCommand
-
3种指令都试过。。。
-
查看源码发现可以用变长参数或者数组来实现变相还原内容:
@Handler fun CommandSender.handle(vararg args: String) { val command = buildString { args.forEach { append(it).append(' ') } }.trimEnd() execSmCommand(command) { runBlocking { sendMessage(it) } } }