From 69d8757ad983697cdc9182fdcc1cdb612a77fb41 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 10 Jun 2026 04:44:31 -0400 Subject: feat: yaml architecture for complex object interaction --- internal/game/cmd_alias.go | 102 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 internal/game/cmd_alias.go (limited to 'internal/game/cmd_alias.go') diff --git a/internal/game/cmd_alias.go b/internal/game/cmd_alias.go new file mode 100644 index 0000000..cb0537e --- /dev/null +++ b/internal/game/cmd_alias.go @@ -0,0 +1,102 @@ +package game + +import ( + "fmt" + "sort" + "strings" + + "thirdcollapse/internal/net" +) + +func (g *Game) doAlias(sess *net.Session, args []string) { + if sess.Account == nil { + sess.WriteLine("No account loaded.") + return + } + + if len(args) == 0 { + if len(sess.Account.Aliases) == 0 { + sess.WriteLine("\nNo aliases defined. Use ALIAS to create one.") + return + } + sess.WriteLine("\nAliases:") + names := make([]string, 0, len(sess.Account.Aliases)) + maxLen := 0 + for name := range sess.Account.Aliases { + names = append(names, name) + if len(name) > maxLen { + maxLen = len(name) + } + } + sort.Strings(names) + for _, name := range names { + sess.WriteLine(fmt.Sprintf(" %-*s: %s", maxLen, name, sess.Account.Aliases[name])) + } + return + } + + if len(args) < 2 { + sess.WriteLine("Usage: ALIAS ") + return + } + + aliasName := strings.ToLower(args[0]) + aliasCmd := strings.Join(args[1:], " ") + + if sess.Account.Aliases == nil { + sess.Account.Aliases = make(map[string]string) + } + sess.Account.Aliases[aliasName] = aliasCmd + + acc, err := g.AccountStore.LoadAccount(sess.Account.Name) + if err != nil { + sess.WriteLine("Error saving alias.") + return + } + acc.Aliases = sess.Account.Aliases + if err := g.AccountStore.SaveAccount(acc); err != nil { + sess.WriteLine("Error saving alias.") + return + } + + sess.WriteLine(fmt.Sprintf("\nAlias set: %s -> %s", aliasName, aliasCmd)) +} + +func (g *Game) doUnalias(sess *net.Session, args []string) { + if sess.Account == nil { + sess.WriteLine("No account loaded.") + return + } + + if len(args) == 0 { + sess.WriteLine("\nUsage: UNALIAS ") + sess.WriteLine("Removes an alias. Use ALIAS with no arguments to see your aliases.") + return + } + + aliasName := strings.ToLower(args[0]) + + if sess.Account.Aliases == nil { + sess.Account.Aliases = make(map[string]string) + } + + if _, ok := sess.Account.Aliases[aliasName]; !ok { + sess.WriteLine(fmt.Sprintf("No alias '%s' found.", aliasName)) + return + } + + delete(sess.Account.Aliases, aliasName) + + acc, err := g.AccountStore.LoadAccount(sess.Account.Name) + if err != nil { + sess.WriteLine("Error saving alias.") + return + } + acc.Aliases = sess.Account.Aliases + if err := g.AccountStore.SaveAccount(acc); err != nil { + sess.WriteLine("Error saving alias.") + return + } + + sess.WriteLine(fmt.Sprintf("\nAlias '%s' removed.", aliasName)) +} -- cgit v1.2.3