diff options
| author | historia <[not public]> | 2026-06-10 04:44:31 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-10 04:44:31 -0400 |
| commit | 69d8757ad983697cdc9182fdcc1cdb612a77fb41 (patch) | |
| tree | 348c26d1f6defe3aef64f5aa9e7cefed0e764214 /internal/game/cmd_alias.go | |
| parent | a226d72e51eecb768b13600303f73483118d9104 (diff) | |
| download | thehouseoficarus-69d8757ad983697cdc9182fdcc1cdb612a77fb41.tar.gz | |
feat: yaml architecture for complex object interaction
Diffstat (limited to 'internal/game/cmd_alias.go')
| -rw-r--r-- | internal/game/cmd_alias.go | 102 |
1 files changed, 102 insertions, 0 deletions
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 <name> <command> 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 <name> <command>") + 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 <name>") + 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)) +} |
