80 lines
1.6 KiB
Go
80 lines
1.6 KiB
Go
package general
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
hc "neo/context"
|
|
"neo/core"
|
|
)
|
|
|
|
func init() {
|
|
core.Default.Register(Help)
|
|
}
|
|
|
|
var Help = &core.Command{
|
|
Name: "help",
|
|
Aliases: []string{"?", "h", "menu"},
|
|
Category: "general",
|
|
Description: "Shows the bot's features and commands",
|
|
Run: func(ctx *hc.Ctx) {
|
|
loc, err := time.LoadLocation("Asia/Jakarta")
|
|
if err != nil {
|
|
loc = time.FixedZone("UTC+7", 7*3600)
|
|
}
|
|
|
|
now := time.Now().In(loc)
|
|
hour := now.Hour()
|
|
|
|
var greeting string
|
|
switch {
|
|
case hour >= 4 && hour < 12:
|
|
greeting = "Ohayō"
|
|
case hour >= 12 && hour < 18:
|
|
greeting = "Konnichiwa"
|
|
default:
|
|
greeting = "Konbanwa"
|
|
}
|
|
|
|
pushName := ctx.Event().Info.PushName
|
|
if pushName == "" {
|
|
pushName = "User"
|
|
}
|
|
|
|
// Header
|
|
var sb strings.Builder
|
|
sb.WriteString(fmt.Sprintf("%s *%s*👋\n📬 Need help? Here are all of my commands\n", greeting, pushName))
|
|
|
|
// Group commands by category (simulate json object array appending)
|
|
cmdMap := make(map[string][]string)
|
|
for _, cmd := range core.Default.GetCommands() {
|
|
cat := cmd.Category
|
|
if cat == "" {
|
|
cat = "general"
|
|
}
|
|
cmdMap[cat] = append(cmdMap[cat], cmd.Name)
|
|
}
|
|
|
|
prefix := ctx.Prefix()
|
|
if prefix == "" {
|
|
// fallback if they called it somehow internally without prefix
|
|
prefix = "."
|
|
}
|
|
|
|
// Print categories
|
|
for cat, cmds := range cmdMap {
|
|
sb.WriteString(fmt.Sprintf("\n*📃%s*\n", strings.ToUpper(cat)))
|
|
for i, cmdName := range cmds {
|
|
branch := "├"
|
|
if i == len(cmds)-1 {
|
|
branch = "└"
|
|
}
|
|
sb.WriteString(fmt.Sprintf("%s %s%s\n", branch, prefix, cmdName))
|
|
}
|
|
}
|
|
|
|
ctx.Reply(sb.String())
|
|
},
|
|
}
|