mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 10:30:13 +08:00
Add CommandExecuteResult.IllegalArgument
This commit is contained in:
parent
b77a856ebe
commit
58d799581b
@ -55,6 +55,21 @@ public sealed class CommandExecuteResult {
|
||||
public override val status: CommandExecuteStatus get() = CommandExecuteStatus.SUCCESSFUL
|
||||
}
|
||||
|
||||
/** 执行执行时发生了一个非法参数错误 */
|
||||
public class IllegalArgument(
|
||||
/** 指令执行时发生的错误 */
|
||||
public override val exception: IllegalArgumentException,
|
||||
/** 尝试执行的指令 */
|
||||
public override val command: Command,
|
||||
/** 尝试执行的指令名 */
|
||||
public override val commandName: String,
|
||||
/** 基础分割后的实际参数列表, 元素类型可能为 [Message] 或 [String] */
|
||||
public override val args: MessageChain
|
||||
) : CommandExecuteResult() {
|
||||
/** 指令最终执行状态, 总是 [CommandExecuteStatus.EXECUTION_EXCEPTION] */
|
||||
public override val status: CommandExecuteStatus get() = CommandExecuteStatus.ILLEGAL_ARGUMENT
|
||||
}
|
||||
|
||||
/** 指令执行过程出现了错误 */
|
||||
public class ExecutionFailed(
|
||||
/** 指令执行时发生的错误 */
|
||||
@ -119,7 +134,9 @@ public sealed class CommandExecuteResult {
|
||||
COMMAND_NOT_FOUND,
|
||||
|
||||
/** 权限不足 */
|
||||
PERMISSION_DENIED
|
||||
PERMISSION_DENIED,
|
||||
/** 非法参数 */
|
||||
ILLEGAL_ARGUMENT,
|
||||
}
|
||||
}
|
||||
|
||||
@ -138,6 +155,18 @@ public fun CommandExecuteResult.isSuccess(): Boolean {
|
||||
return this is CommandExecuteResult.Success
|
||||
}
|
||||
|
||||
/**
|
||||
* 当 [this] 为 [CommandExecuteResult.IllegalArgument] 时返回 `true`
|
||||
*/
|
||||
@JvmSynthetic
|
||||
public fun CommandExecuteResult.isIllegalArgument(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (this@isIllegalArgument is CommandExecuteResult.IllegalArgument)
|
||||
returns(false) implies (this@isIllegalArgument !is CommandExecuteResult.IllegalArgument)
|
||||
}
|
||||
return this is CommandExecuteResult.IllegalArgument
|
||||
}
|
||||
|
||||
/**
|
||||
* 当 [this] 为 [CommandExecuteResult.ExecutionFailed] 时返回 `true`
|
||||
*/
|
||||
|
@ -72,6 +72,10 @@ internal object CommandManagerImpl : CommandManager, CoroutineScope by Coroutine
|
||||
intercept()
|
||||
}
|
||||
}
|
||||
is CommandExecuteResult.IllegalArgument -> {
|
||||
result.exception.message?.let { sender.sendMessage(it) }
|
||||
intercept()
|
||||
}
|
||||
is CommandExecuteResult.Success -> {
|
||||
intercept()
|
||||
}
|
||||
|
@ -36,11 +36,16 @@ internal suspend fun CommandSender.executeCommandInternal(
|
||||
args = args
|
||||
)
|
||||
},
|
||||
onFailure = {
|
||||
return CommandExecuteResult.ExecutionFailed(
|
||||
onFailure = { exception ->
|
||||
return if (exception is IllegalArgumentException) CommandExecuteResult.IllegalArgument(
|
||||
commandName = commandName,
|
||||
command = command,
|
||||
exception = it,
|
||||
exception = exception,
|
||||
args = args
|
||||
) else CommandExecuteResult.ExecutionFailed(
|
||||
commandName = commandName,
|
||||
command = command,
|
||||
exception = exception,
|
||||
args = args
|
||||
)
|
||||
}
|
||||
|
@ -15,11 +15,8 @@ import kotlinx.coroutines.CoroutineName
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import net.mamoe.mirai.console.MiraiConsole
|
||||
import net.mamoe.mirai.console.command.BuiltInCommands
|
||||
import net.mamoe.mirai.console.command.CommandExecuteStatus
|
||||
import net.mamoe.mirai.console.command.CommandManager
|
||||
import net.mamoe.mirai.console.command.*
|
||||
import net.mamoe.mirai.console.command.CommandManager.INSTANCE.executeCommand
|
||||
import net.mamoe.mirai.console.command.ConsoleCommandSender
|
||||
import net.mamoe.mirai.console.terminal.noconsole.NoConsole
|
||||
import net.mamoe.mirai.console.util.ConsoleInternalApi
|
||||
import net.mamoe.mirai.console.util.requestInput
|
||||
@ -65,6 +62,9 @@ internal fun startupConsoleThread() {
|
||||
when (result.status) {
|
||||
CommandExecuteStatus.SUCCESSFUL -> {
|
||||
}
|
||||
CommandExecuteStatus.ILLEGAL_ARGUMENT -> {
|
||||
result.exception?.message?.let { consoleLogger.warning(it) }
|
||||
}
|
||||
CommandExecuteStatus.EXECUTION_EXCEPTION -> {
|
||||
result.exception?.let(consoleLogger::error)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user