func (cmd Command) Name() string {
	return cmd.name
}
Name returns the name of the command. The name is guaranteed to be lowercase and will never have spaces in
it. This name is used to call the command, and is shown in the /help list.
package cmd
import (
	"encoding/csv"
	"fmt"
	"github.com/go-gl/mathgl/mgl64"
	"reflect"
	"strings"
)
type Runnable interface {
	Run(source Source, output *Output)
}
type Allower interface {
	Allow(s Source) bool
}
type Command struct {
	v           []reflect.Value
	name        string
	description string
	usage       string
	aliases     []string
}
func New(name, description string, aliases []string, r ...Runnable) Command {
	usages := make([]string, len(r))
	runnableValues := make([]reflect.Value, len(r))
	if len(aliases) > 0 {
		namePresent := false
		for _, alias := range aliases {
			if alias == name {
				namePresent = true
			}
		}
		if !namePresent {
			aliases = append(aliases, name)
		}
	}
	for i, runnable := range r {
		t := reflect.TypeOf(runnable)
		if t.Kind() != reflect.Struct && (t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct) {
			panic(fmt.Sprintf("Runnable r must be struct or pointer to struct, but got %v", t.Kind()))
		}
		original := reflect.ValueOf(runnable)
		if t.Kind() == reflect.Ptr {
			original = original.Elem()
		}
		if err := verifySignature(original); err != nil {
			panic(err.Error())
		}
		runnableValues[i], usages[i] = original, parseUsage(name, original)
	}
	return Command{name: name, description: description, aliases: aliases, v: runnableValues, usage: strings.Join(usages, "\n")}
}