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  }