From ef888b725670afb0a6f878732e1a21792f41bc0d Mon Sep 17 00:00:00 2001 From: Fdvkey Date: Thu, 16 Jul 2026 07:15:38 +0700 Subject: [PATCH] perf: cache static command menu layout to avoid redundant loop processing --- cmds/general/help.go | 67 ++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/cmds/general/help.go b/cmds/general/help.go index ac705d5..3e66aa1 100644 --- a/cmds/general/help.go +++ b/cmds/general/help.go @@ -3,6 +3,7 @@ package general import ( "fmt" "strings" + "sync" "time" hc "neo/context" @@ -13,6 +14,38 @@ func init() { core.Default.Register(Help) } +var ( + cachedMenu string + menuOnce sync.Once +) + +// buildMenuCache generates the static portion of the help menu +func buildMenuCache(prefix string) { + var sb strings.Builder + + 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) + } + + 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)) + } + } + + cachedMenu = sb.String() +} + var Help = &core.Command{ Name: "help", Aliases: []string{"?", "h", "menu"}, @@ -42,38 +75,18 @@ var Help = &core.Command{ 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)) - } - } + // Calculate the static command layout part only once + menuOnce.Do(func() { + buildMenuCache(prefix) + }) - ctx.Reply(sb.String()) + header := fmt.Sprintf("%s *%s*šŸ‘‹\nšŸ“¬ Need help? Here are all of my commands\n", greeting, pushName) + + ctx.Reply(header + cachedMenu) }, }