mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 18:40:15 +08:00
Fix CommandExecuteResult
This commit is contained in:
parent
fbe5ce0970
commit
46ff28050f
@ -83,16 +83,16 @@ public sealed class CommandExecuteResult {
|
||||
) : Failure()
|
||||
|
||||
/** 没有匹配的指令 */
|
||||
public class UnresolvedCommand : Failure() {
|
||||
public class UnresolvedCommand(
|
||||
/** 解析的 [CommandCall] (如果匹配到) */
|
||||
public override val call: CommandCall?,
|
||||
) : Failure() {
|
||||
/** 指令执行时发生的错误, 总是 `null` */
|
||||
public override val exception: Nothing? get() = null
|
||||
|
||||
/** 尝试执行的指令, 总是 `null` */
|
||||
public override val command: Nothing? get() = null
|
||||
|
||||
/** 解析的 [CommandCall] (如果匹配到) */
|
||||
public override val call: CommandCall? get() = null
|
||||
|
||||
/** 解析的 [ResolvedCommandCall] (如果匹配到) */
|
||||
public override val resolvedCall: ResolvedCommandCall? get() = null
|
||||
}
|
||||
@ -114,6 +114,8 @@ public sealed class CommandExecuteResult {
|
||||
public class UnmatchedSignature(
|
||||
/** 尝试执行的指令 */
|
||||
public override val command: Command,
|
||||
/** 解析的 [CommandCall] (如果匹配到) */
|
||||
public override val call: CommandCall,
|
||||
/** 尝试执行的指令 */
|
||||
@ExperimentalCommandDescriptors
|
||||
@ConsoleExperimentalApi
|
||||
@ -122,9 +124,6 @@ public sealed class CommandExecuteResult {
|
||||
/** 指令执行时发生的错误, 总是 `null` */
|
||||
public override val exception: Nothing? get() = null
|
||||
|
||||
/** 解析的 [CommandCall] (如果匹配到) */
|
||||
public override val call: CommandCall? get() = null
|
||||
|
||||
/** 解析的 [ResolvedCommandCall] (如果匹配到) */
|
||||
public override val resolvedCall: ResolvedCommandCall? get() = null
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ public object BuiltInCommandCallResolver : CommandCallResolver {
|
||||
val failureReasons = unmatchedCommandSignatures.toMutableList()
|
||||
val rA = FailureReason.ResolutionAmbiguity(resolutionAmbiguities)
|
||||
failureReasons.addAll(resolutionAmbiguities.map { UnmatchedCommandSignature(it, rA) })
|
||||
return CommandExecuteResult.UnmatchedSignature(command, unmatchedCommandSignatures)
|
||||
return CommandExecuteResult.UnmatchedSignature(command, call, unmatchedCommandSignatures)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,16 +33,15 @@ public class CommandResolveResult private constructor(
|
||||
get() = value.safeCast()
|
||||
|
||||
public inline fun <R> fold(
|
||||
onSuccess: (ResolvedCommandCall) -> R,
|
||||
onSuccess: (ResolvedCommandCall?) -> R,
|
||||
onFailure: (CommandExecuteResult.Failure) -> R,
|
||||
): R {
|
||||
contract {
|
||||
callsInPlace(onSuccess, InvocationKind.AT_MOST_ONCE)
|
||||
callsInPlace(onFailure, InvocationKind.AT_MOST_ONCE)
|
||||
}
|
||||
call?.let(onSuccess)?.let { return it }
|
||||
failure?.let(onFailure)?.let { return it }
|
||||
throw kotlin.AssertionError()
|
||||
return call.let(onSuccess)
|
||||
}
|
||||
|
||||
public constructor(call: ResolvedCommandCall?) : this(call as Any?)
|
||||
|
@ -177,11 +177,11 @@ internal suspend fun executeCommandImpl(
|
||||
caller: CommandSender,
|
||||
checkPermission: Boolean,
|
||||
): CommandExecuteResult {
|
||||
val call = message.asMessageChain().parseCommandCall(caller) ?: return CommandExecuteResult.UnresolvedCommand()
|
||||
val call = message.asMessageChain().parseCommandCall(caller) ?: return CommandExecuteResult.UnresolvedCommand(null)
|
||||
val resolved = call.resolve().fold(
|
||||
onSuccess = { it },
|
||||
onFailure = { return it }
|
||||
)
|
||||
) ?: return CommandExecuteResult.UnresolvedCommand(call)
|
||||
|
||||
val command = resolved.callee
|
||||
|
||||
|
@ -144,6 +144,11 @@ internal class CommandReflector(
|
||||
}
|
||||
|
||||
fun generateUsage(overloads: Iterable<CommandSignatureFromKFunction>): String {
|
||||
return generateUsage(command, annotationResolver, overloads)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun generateUsage(command: Command, annotationResolver: SubCommandAnnotationResolver?, overloads: Iterable<CommandSignature>): String {
|
||||
return overloads.joinToString("\n") { subcommand ->
|
||||
buildString {
|
||||
if (command.prefixOptional) {
|
||||
@ -158,6 +163,7 @@ internal class CommandReflector(
|
||||
append(" ")
|
||||
//}
|
||||
append(subcommand.valueParameters.joinToString(" ") { it.render() })
|
||||
if (annotationResolver != null && subcommand is CommandSignatureFromKFunction) {
|
||||
annotationResolver.getDescription(command, subcommand.originFunction)?.let { description ->
|
||||
append(" # ")
|
||||
append(description)
|
||||
@ -165,9 +171,7 @@ internal class CommandReflector(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
companion object {
|
||||
}
|
||||
|
||||
private fun <T> AbstractCommandValueParameter<T>.render(): String {
|
||||
return when (this) {
|
||||
|
Loading…
Reference in New Issue
Block a user