mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-12-11 07:54:58 +00:00
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package bot
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
type ErrUnknownCommand struct {
|
|
Parts []string // max len 2
|
|
Subcmd *Subcommand
|
|
}
|
|
|
|
func (err *ErrUnknownCommand) Error() string {
|
|
if len(err.Parts) > 2 {
|
|
err.Parts = err.Parts[:2]
|
|
}
|
|
return UnknownCommandString(err)
|
|
}
|
|
|
|
var UnknownCommandString = func(err *ErrUnknownCommand) string {
|
|
return "unknown command: " + strings.Join(err.Parts, " ")
|
|
}
|
|
|
|
var (
|
|
ErrTooManyArgs = errors.New("too many arguments given")
|
|
ErrNotEnoughArgs = errors.New("not enough arguments given")
|
|
)
|
|
|
|
type ErrInvalidUsage struct {
|
|
Prefix string
|
|
Args []string
|
|
Index int
|
|
Wrap error
|
|
|
|
// TODO: usage generator?
|
|
// Here, as a reminder
|
|
Ctx *MethodContext
|
|
}
|
|
|
|
func (err *ErrInvalidUsage) Error() string {
|
|
return InvalidUsageString(err)
|
|
}
|
|
|
|
func (err *ErrInvalidUsage) Unwrap() error {
|
|
return err.Wrap
|
|
}
|
|
|
|
var InvalidUsageString = func(err *ErrInvalidUsage) string {
|
|
if err.Index == 0 && err.Wrap != nil {
|
|
return "invalid usage, error: " + err.Wrap.Error() + "."
|
|
}
|
|
|
|
if err.Index == 0 || len(err.Args) == 0 {
|
|
return "missing arguments. Refer to help."
|
|
}
|
|
|
|
body := "Invalid usage at " +
|
|
// Write the prefix.
|
|
err.Prefix +
|
|
// Write the first part
|
|
strings.Join(err.Args[:err.Index], " ") +
|
|
// Write the wrong part
|
|
" __" + err.Args[err.Index] + "__ " +
|
|
// Write the last part
|
|
strings.Join(err.Args[err.Index+1:], " ")
|
|
|
|
if err.Wrap != nil {
|
|
body += "\nError: " + err.Wrap.Error() + "."
|
|
}
|
|
|
|
return body
|
|
}
|