diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index a6d6c40e48..a9059dfb6b 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -89,9 +89,10 @@ class CmdNick(COMMAND_DEFAULT_CLASS): inputline - replace on the inputline (default) object - replace on object-lookup account - replace on account-lookup - delete - remove nick by name or by index in /list - clearall - clear all nicks + list - show all defined aliases (also "nicks" works) + delete - remove nick by index in /list + clearall - clear all nicks Examples: nick hi = say Hello, I'm Sarah! @@ -103,13 +104,13 @@ class CmdNick(COMMAND_DEFAULT_CLASS): A 'nick' is a personal string replacement. Use $1, $2, ... to catch arguments. Put the last $-marker without an ending space to catch all remaining text. You - can also use unix-glob matching for the left-hand side: + can also use unix-glob matching for the left-hand side : * - matches everything ? - matches 0 or 1 single characters [abcd] - matches these chars in any order [!abcd] - matches everything not among these chars - \= - use to have '=' in your matching string + \= - escape literal '=' you want in your Note that no objects are actually renamed or changed by this command - your nicks are only available to you. If you want to permanently add keywords to an object @@ -143,9 +144,12 @@ class CmdNick(COMMAND_DEFAULT_CLASS): caller = self.caller switches = self.switches - nicktypes = [switch for switch in switches if switch in ("object", "account", "inputline")] or ["inputline"] + nicktypes = [switch for switch in switches if switch in ( + "object", "account", "inputline")] or ["inputline"] - nicklist = utils.make_iter(caller.nicks.get(return_obj=True) or []) + nicklist = (utils.make_iter(caller.nicks.get(category="inputline", return_obj=True) or []) + + utils.make_iter(caller.nicks.get(category="object", return_obj=True) or []) + + utils.make_iter(caller.nicks.get(category="account", return_obj=True) or [])) if 'list' in switches or self.cmdstring in ("nicks", "@nicks"): @@ -165,17 +169,37 @@ class CmdNick(COMMAND_DEFAULT_CLASS): caller.msg("Cleared all nicks.") return + if 'delete' in switches or 'del' in switches: + if not self.args or not self.lhs: + caller.msg("usage nick/delete #num ('nicks' for list)") + return + # see if a number was given + arg = self.args.lstrip("#") + if arg.isdigit(): + # we are given a index in nicklist + delindex = int(arg) + if 0 < delindex <= len(nicklist): + oldnick = nicklist[delindex - 1] + _, _, old_nickstring, old_replstring = oldnick.value + else: + caller.msg("Not a valid nick index. See 'nicks' for a list.") + return + nicktype = oldnick.category + nicktypestr = "%s-nick" % nicktype.capitalize() + + caller.nicks.remove(old_nickstring, category=nicktype) + caller.msg("%s removed: '|w%s|n' -> |w%s|n." % ( + nicktypestr, old_nickstring, old_replstring)) + return + if not self.args or not self.lhs: - if "delete" in switches or "del" in switches: - caller.msg("usage nick/delete nickname or #1 (use nicks for list)") - else: - caller.msg("Usage: nick[/switches] nickname = [realname]") + caller.msg("Usage: nick[/switches] nickname = [realname]") return + # setting new nicks + nickstring = self.lhs replstring = self.rhs - old_nickstring = None - old_replstring = None if replstring == nickstring: caller.msg("No point in setting nick same as the string to replace...") @@ -185,39 +209,24 @@ class CmdNick(COMMAND_DEFAULT_CLASS): errstring = "" string = "" for nicktype in nicktypes: + nicktypestr = "%s-nick" % nicktype.capitalize() + old_nickstring = None + old_replstring = None + oldnick = caller.nicks.get(key=nickstring, category=nicktype, return_obj=True) if oldnick: _, _, old_nickstring, old_replstring = oldnick.value - else: - # no old nick, see if a number was given - arg = self.args.lstrip("#") - if arg.isdigit(): - # we are given a index in nicklist - delindex = int(arg) - if 0 < delindex <= len(nicklist): - oldnick = nicklist[delindex - 1] - _, _, old_nickstring, old_replstring = oldnick.value - else: - errstring += "Not a valid nick index." - else: - errstring += "Nick not found." - if "delete" in switches or "del" in switches: - # clear the nick - if old_nickstring and caller.nicks.has(old_nickstring, category=nicktype): - caller.nicks.remove(old_nickstring, category=nicktype) - string += "\nNick removed: '|w%s|n' -> |w%s|n." % (old_nickstring, old_replstring) - else: - errstring += "\nNick '|w%s|n' was not deleted." % (old_nickstring) - elif replstring: + if replstring: # creating new nick errstring = "" if oldnick: if replstring == old_replstring: - string += "\nIdentical nick already set." + string += "\nIdentical %s already set." % nicktypestr.lower() else: - string += "\nNick '|w%s|n' updated to map to '|w%s|n'." % (old_nickstring, replstring) + string += "\n%s '|w%s|n' updated to map to '|w%s|n'." % ( + nicktypestr, old_nickstring, replstring) else: - string += "\nNick '|w%s|n' mapped to '|w%s|n'." % (nickstring, replstring) + string += "\n%s '|w%s|n' mapped to '|w%s|n'." % (nicktypestr, nickstring, replstring) try: caller.nicks.add(nickstring, replstring, category=nicktype) except NickTemplateInvalid: @@ -225,7 +234,7 @@ class CmdNick(COMMAND_DEFAULT_CLASS): return elif old_nickstring and old_replstring: # just looking at the nick - string += "\nNick '|w%s|n' maps to '|w%s|n'." % (old_nickstring, old_replstring) + string += "\n%s '|w%s|n' maps to '|w%s|n'." % (nicktypestr, old_nickstring, old_replstring) errstring = "" string = errstring if errstring else string caller.msg(_cy(string)) diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index f437779662..3c7dc258d8 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -126,9 +126,9 @@ class TestGeneral(CommandTest): self.call(general.CmdPose(), "looks around", "Char looks around") def test_nick(self): - self.call(general.CmdNick(), "testalias = testaliasedstring1", "Nick 'testalias' mapped to 'testaliasedstring1'.") - self.call(general.CmdNick(), "/account testalias = testaliasedstring2", "Nick 'testalias' mapped to 'testaliasedstring2'.") - self.call(general.CmdNick(), "/object testalias = testaliasedstring3", "Nick 'testalias' mapped to 'testaliasedstring3'.") + self.call(general.CmdNick(), "testalias = testaliasedstring1", "Inputlinenick 'testalias' mapped to 'testaliasedstring1'.") + self.call(general.CmdNick(), "/account testalias = testaliasedstring2", "Accountnick 'testalias' mapped to 'testaliasedstring2'.") + self.call(general.CmdNick(), "/object testalias = testaliasedstring3", "Objectnick 'testalias' mapped to 'testaliasedstring3'.") self.assertEqual(u"testaliasedstring1", self.char1.nicks.get("testalias")) self.assertEqual(u"testaliasedstring2", self.char1.nicks.get("testalias", category="account")) self.assertEqual(u"testaliasedstring3", self.char1.nicks.get("testalias", category="object"))