github.com/diamondburned/arikawa@v1.3.14/bot/error.go (about) 1 package bot 2 3 import ( 4 "errors" 5 "strings" 6 ) 7 8 type ErrUnknownCommand struct { 9 Parts []string // max len 2 10 Subcmd *Subcommand 11 } 12 13 func (err *ErrUnknownCommand) Error() string { 14 if len(err.Parts) > 2 { 15 err.Parts = err.Parts[:2] 16 } 17 return UnknownCommandString(err) 18 } 19 20 var UnknownCommandString = func(err *ErrUnknownCommand) string { 21 return "unknown command: " + strings.Join(err.Parts, " ") 22 } 23 24 var ( 25 ErrTooManyArgs = errors.New("too many arguments given") 26 ErrNotEnoughArgs = errors.New("not enough arguments given") 27 ) 28 29 type ErrInvalidUsage struct { 30 Prefix string 31 Args []string 32 Index int 33 Wrap error 34 35 // TODO: usage generator? 36 // Here, as a reminder 37 Ctx *MethodContext 38 } 39 40 func (err *ErrInvalidUsage) Error() string { 41 return InvalidUsageString(err) 42 } 43 44 func (err *ErrInvalidUsage) Unwrap() error { 45 return err.Wrap 46 } 47 48 var InvalidUsageString = func(err *ErrInvalidUsage) string { 49 if err.Index == 0 && err.Wrap != nil { 50 return "invalid usage, error: " + err.Wrap.Error() + "." 51 } 52 53 if err.Index == 0 || len(err.Args) == 0 { 54 return "missing arguments. Refer to help." 55 } 56 57 body := "Invalid usage at " + 58 // Write the prefix. 59 err.Prefix + 60 // Write the first part 61 strings.Join(err.Args[:err.Index], " ") + 62 // Write the wrong part 63 " __" + err.Args[err.Index] + "__ " + 64 // Write the last part 65 strings.Join(err.Args[err.Index+1:], " ") 66 67 if err.Wrap != nil { 68 body += "\nError: " + err.Wrap.Error() + "." 69 } 70 71 return body 72 }