aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_alias.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/cmd_alias.go')
-rw-r--r--internal/game/cmd_alias.go102
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))
+}