From ee9d6b0d4d242d6807a431bb0264f9fca30a364f Mon Sep 17 00:00:00 2001 From: diamondburned Date: Sat, 14 Nov 2020 22:11:10 -0800 Subject: [PATCH] Bot: clearer subcommand not found error --- bot/ctx_call.go | 10 ++-------- bot/error.go | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/bot/ctx_call.go b/bot/ctx_call.go index 02ff704..1677a71 100644 --- a/bot/ctx_call.go +++ b/bot/ctx_call.go @@ -351,20 +351,14 @@ func (ctx *Context) findCommand(parts []string) ([]string, *MethodContext, *Subc return nil, nil, nil, Break } - return nil, nil, nil, &ErrUnknownCommand{ - Parts: parts, - Subcmd: s, - } + return nil, nil, nil, newErrUnknownCommand(s, parts) } if ctx.SilentUnknown.Command { return nil, nil, nil, Break } - return nil, nil, nil, &ErrUnknownCommand{ - Parts: parts, - Subcmd: ctx.Subcommand, - } + return nil, nil, nil, newErrUnknownCommand(ctx.Subcommand, parts) } // searchStringAndSlice searches if str is equal to isString or any of the given diff --git a/bot/error.go b/bot/error.go index 7bafdba..6fd0a33 100644 --- a/bot/error.go +++ b/bot/error.go @@ -2,6 +2,7 @@ package bot import ( "errors" + "fmt" "strings" ) @@ -10,15 +11,28 @@ type ErrUnknownCommand struct { Subcmd *Subcommand } -func (err *ErrUnknownCommand) Error() string { - if len(err.Parts) > 2 { - err.Parts = err.Parts[:2] +func newErrUnknownCommand(s *Subcommand, parts []string) error { + if len(parts) > 2 { + parts = parts[:2] } + + return &ErrUnknownCommand{ + Parts: parts, + Subcmd: s, + } +} + +func (err *ErrUnknownCommand) Error() string { return UnknownCommandString(err) } var UnknownCommandString = func(err *ErrUnknownCommand) string { - return "unknown command: " + strings.Join(err.Parts, " ") + // Subcommand check. + if err.Subcmd.StructName == "" || len(err.Parts) < 2 { + return "unknown command: " + err.Parts[0] + } + + return fmt.Sprintf("unknown %s subcommand: %s", err.Parts[0], err.Parts[1]) } var (