Stable command order in help and Ad-Hoc list

This commit is contained in:
Bohdan Horbeshko 2024-02-10 16:27:08 -05:00
parent 772246ee4b
commit dc6f99dc3c
2 changed files with 20 additions and 2 deletions

View file

@ -3,6 +3,7 @@ package telegram
import ( import (
"fmt" "fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"sort"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -146,6 +147,21 @@ func GetCommand(typ CommandType, cmd string) (command, bool) {
return command, ok return command, ok
} }
// SortedCommandKeys sorts a slice with command keys
func SortedCommandKeys(commandMap map[string]command) []string {
keys := make([]string, len(commandMap))
i := 0
for k := range commandMap {
keys[i] = k
i++
}
sort.Strings(keys)
return keys
}
// CommandToHelpString builds a text description of a command // CommandToHelpString builds a text description of a command
func CommandToHelpString(name string, cmd command) string { func CommandToHelpString(name string, cmd command) string {
var str strings.Builder var str strings.Builder
@ -175,7 +191,8 @@ func helpString(typ CommandType) string {
commandMap := GetCommands(typ) commandMap := GetCommands(typ)
str.WriteString("Available commands:\n") str.WriteString("Available commands:\n")
for name, command := range commandMap { for _, name := range SortedCommandKeys(commandMap) {
command := commandMap[name]
str.WriteString(CommandToHelpString(name, command)) str.WriteString(CommandToHelpString(name, command))
str.WriteString("\n") str.WriteString("\n")
} }

View file

@ -557,7 +557,8 @@ func handleGetDiscoItems(s xmpp.Sender, iq *stanza.IQ, di *stanza.DiscoItems) {
} }
commands := telegram.GetCommands(cmdType) commands := telegram.GetCommands(cmdType)
for name, command := range commands { for _, name := range telegram.SortedCommandKeys(commands) {
command := commands[name]
di.AddItem(iq.To, name, telegram.CommandToHelpString(name, command)) di.AddItem(iq.To, name, telegram.CommandToHelpString(name, command))
} }
} else { } else {