Refactoring/cleanup of deletion/managing of nicks in nick Command

This commit is contained in:
Griatch 2018-01-09 19:39:49 +01:00
parent 05c6813dd9
commit c7cfca2785
2 changed files with 49 additions and 40 deletions

View file

@ -89,9 +89,10 @@ class CmdNick(COMMAND_DEFAULT_CLASS):
inputline - replace on the inputline (default) inputline - replace on the inputline (default)
object - replace on object-lookup object - replace on object-lookup
account - replace on account-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) list - show all defined aliases (also "nicks" works)
delete - remove nick by index in /list
clearall - clear all nicks
Examples: Examples:
nick hi = say Hello, I'm Sarah! 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. 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 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 <string>:
* - matches everything * - matches everything
? - matches 0 or 1 single characters ? - matches 0 or 1 single characters
[abcd] - matches these chars in any order [abcd] - matches these chars in any order
[!abcd] - matches everything not among these chars [!abcd] - matches everything not among these chars
\= - use to have '=' in your matching string \= - escape literal '=' you want in your <string>
Note that no objects are actually renamed or changed by this command - your nicks 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 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 caller = self.caller
switches = self.switches 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"): if 'list' in switches or self.cmdstring in ("nicks", "@nicks"):
@ -165,17 +169,37 @@ class CmdNick(COMMAND_DEFAULT_CLASS):
caller.msg("Cleared all nicks.") caller.msg("Cleared all nicks.")
return 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 not self.args or not self.lhs:
if "delete" in switches or "del" in switches: caller.msg("Usage: nick[/switches] nickname = [realname]")
caller.msg("usage nick/delete nickname or #1 (use nicks for list)")
else:
caller.msg("Usage: nick[/switches] nickname = [realname]")
return return
# setting new nicks
nickstring = self.lhs nickstring = self.lhs
replstring = self.rhs replstring = self.rhs
old_nickstring = None
old_replstring = None
if replstring == nickstring: if replstring == nickstring:
caller.msg("No point in setting nick same as the string to replace...") caller.msg("No point in setting nick same as the string to replace...")
@ -185,39 +209,24 @@ class CmdNick(COMMAND_DEFAULT_CLASS):
errstring = "" errstring = ""
string = "" string = ""
for nicktype in nicktypes: 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) oldnick = caller.nicks.get(key=nickstring, category=nicktype, return_obj=True)
if oldnick: if oldnick:
_, _, old_nickstring, old_replstring = oldnick.value _, _, old_nickstring, old_replstring = oldnick.value
else: if replstring:
# 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:
# creating new nick # creating new nick
errstring = "" errstring = ""
if oldnick: if oldnick:
if replstring == old_replstring: if replstring == old_replstring:
string += "\nIdentical nick already set." string += "\nIdentical %s already set." % nicktypestr.lower()
else: 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: 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: try:
caller.nicks.add(nickstring, replstring, category=nicktype) caller.nicks.add(nickstring, replstring, category=nicktype)
except NickTemplateInvalid: except NickTemplateInvalid:
@ -225,7 +234,7 @@ class CmdNick(COMMAND_DEFAULT_CLASS):
return return
elif old_nickstring and old_replstring: elif old_nickstring and old_replstring:
# just looking at the nick # 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 = "" errstring = ""
string = errstring if errstring else string string = errstring if errstring else string
caller.msg(_cy(string)) caller.msg(_cy(string))

View file

@ -126,9 +126,9 @@ class TestGeneral(CommandTest):
self.call(general.CmdPose(), "looks around", "Char looks around") self.call(general.CmdPose(), "looks around", "Char looks around")
def test_nick(self): def test_nick(self):
self.call(general.CmdNick(), "testalias = testaliasedstring1", "Nick 'testalias' mapped to 'testaliasedstring1'.") self.call(general.CmdNick(), "testalias = testaliasedstring1", "Inputlinenick 'testalias' mapped to 'testaliasedstring1'.")
self.call(general.CmdNick(), "/account testalias = testaliasedstring2", "Nick 'testalias' mapped to 'testaliasedstring2'.") self.call(general.CmdNick(), "/account testalias = testaliasedstring2", "Accountnick 'testalias' mapped to 'testaliasedstring2'.")
self.call(general.CmdNick(), "/object testalias = testaliasedstring3", "Nick 'testalias' mapped to 'testaliasedstring3'.") self.call(general.CmdNick(), "/object testalias = testaliasedstring3", "Objectnick 'testalias' mapped to 'testaliasedstring3'.")
self.assertEqual(u"testaliasedstring1", self.char1.nicks.get("testalias")) self.assertEqual(u"testaliasedstring1", self.char1.nicks.get("testalias"))
self.assertEqual(u"testaliasedstring2", self.char1.nicks.get("testalias", category="account")) self.assertEqual(u"testaliasedstring2", self.char1.nicks.get("testalias", category="account"))
self.assertEqual(u"testaliasedstring3", self.char1.nicks.get("testalias", category="object")) self.assertEqual(u"testaliasedstring3", self.char1.nicks.get("testalias", category="object"))