mirror of
https://github.com/diamondburned/arikawa.git
synced 2025-04-05 19:46:16 +00:00
Help subcommand method
This commit is contained in:
parent
7af350ba55
commit
a5d817b28d
36
bot/ctx.go
36
bot/ctx.go
|
@ -281,6 +281,8 @@ func (ctx *Context) HelpAdmin() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *Context) help(hideAdmin bool) string {
|
func (ctx *Context) help(hideAdmin bool) string {
|
||||||
|
const indent = " "
|
||||||
|
|
||||||
var help strings.Builder
|
var help strings.Builder
|
||||||
|
|
||||||
// Generate the headers and descriptions
|
// Generate the headers and descriptions
|
||||||
|
@ -291,7 +293,7 @@ func (ctx *Context) help(hideAdmin bool) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Description != "" {
|
if ctx.Description != "" {
|
||||||
help.WriteString("\n " + ctx.Description)
|
help.WriteString("\n" + indent + ctx.Description)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Flag.Is(AdminOnly) {
|
if ctx.Flag.Is(AdminOnly) {
|
||||||
|
@ -310,7 +312,7 @@ func (ctx *Context) help(hideAdmin bool) string {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
help.WriteString(" " + ctx.Prefix + cmd.Command)
|
help.WriteString(indent + ctx.Prefix + cmd.Command)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case len(cmd.Usage()) > 0:
|
case len(cmd.Usage()) > 0:
|
||||||
|
@ -326,34 +328,8 @@ func (ctx *Context) help(hideAdmin bool) string {
|
||||||
var subcommands = ctx.Subcommands()
|
var subcommands = ctx.Subcommands()
|
||||||
|
|
||||||
for _, sub := range subcommands {
|
for _, sub := range subcommands {
|
||||||
if sub.Flag.Is(AdminOnly) && hideAdmin {
|
if help := sub.Help(ctx.Prefix, indent, hideAdmin); help != "" {
|
||||||
continue
|
subHelp.WriteString(help)
|
||||||
}
|
|
||||||
|
|
||||||
subHelp.WriteString(" " + sub.Command)
|
|
||||||
|
|
||||||
if sub.Description != "" {
|
|
||||||
subHelp.WriteString(": " + sub.Description)
|
|
||||||
}
|
|
||||||
|
|
||||||
subHelp.WriteByte('\n')
|
|
||||||
|
|
||||||
for _, cmd := range sub.Commands {
|
|
||||||
if cmd.Flag.Is(AdminOnly) && hideAdmin {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
subHelp.WriteString(" " +
|
|
||||||
ctx.Prefix + sub.Command + " " + cmd.Command)
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case len(cmd.Usage()) > 0:
|
|
||||||
subHelp.WriteString(" " + strings.Join(cmd.Usage(), " "))
|
|
||||||
case cmd.Description != "":
|
|
||||||
subHelp.WriteString(": " + cmd.Description)
|
|
||||||
}
|
|
||||||
|
|
||||||
subHelp.WriteByte('\n')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -154,6 +154,49 @@ func (sub *Subcommand) ChangeCommandInfo(methodName, cmd, desc string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sub *Subcommand) Help(prefix, indent string, hideAdmin bool) string {
|
||||||
|
if sub.Flag.Is(AdminOnly) && hideAdmin {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var subHelp string
|
||||||
|
if sub.Command != "" {
|
||||||
|
subHelp += indent + sub.Command
|
||||||
|
}
|
||||||
|
|
||||||
|
if sub.Description != "" {
|
||||||
|
if subHelp != "" {
|
||||||
|
subHelp += ": "
|
||||||
|
} else {
|
||||||
|
subHelp += indent
|
||||||
|
}
|
||||||
|
|
||||||
|
subHelp += sub.Description
|
||||||
|
}
|
||||||
|
|
||||||
|
subHelp += "\n"
|
||||||
|
|
||||||
|
for _, cmd := range sub.Commands {
|
||||||
|
if cmd.Flag.Is(AdminOnly) && hideAdmin {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
subHelp += indent + indent +
|
||||||
|
prefix + sub.Command + " " + cmd.Command
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case len(cmd.Usage()) > 0:
|
||||||
|
subHelp += " " + strings.Join(cmd.Usage(), " ")
|
||||||
|
case cmd.Description != "":
|
||||||
|
subHelp += ": " + cmd.Description
|
||||||
|
}
|
||||||
|
|
||||||
|
subHelp += "\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
return subHelp
|
||||||
|
}
|
||||||
|
|
||||||
func (sub *Subcommand) reflectCommands() error {
|
func (sub *Subcommand) reflectCommands() error {
|
||||||
t := reflect.TypeOf(sub.command)
|
t := reflect.TypeOf(sub.command)
|
||||||
v := reflect.ValueOf(sub.command)
|
v := reflect.ValueOf(sub.command)
|
||||||
|
|
Loading…
Reference in a new issue