diff --git a/evennia/server/portal/telnet_oob.py b/evennia/server/portal/telnet_oob.py index 50c8df7713..af83d8cf23 100644 --- a/evennia/server/portal/telnet_oob.py +++ b/evennia/server/portal/telnet_oob.py @@ -229,24 +229,41 @@ class TelnetOOB(object): IRE games use, supposedly, and what clients appear to have adopted): - [cmdname, [], {}] -> cmdname - [cmdname, [arg], {}] -> cmdname arg - [cmdname, [args],{}] -> cmdname [args] - [cmdname, [], {kwargs}] -> cmdname {kwargs} - [cmdname, [args, {kwargs}] -> cmdname [[args],{kwargs}] + [cmd.name, [], {}] -> Cmd.Name + [cmd.name, [arg], {}] -> Cmd.Name arg + [cmd.name, [args],{}] -> Cmd.Name [args] + [cmd.name, [], {kwargs}] -> Cmd.Name {kwargs} + [cmdname, [args, {kwargs}] -> Custom.Cmdname [[args],{kwargs}] + + Notes: + There are also a few default mappings between evennia outputcmds and + GMCP: + client_options -> Core.Supports.Get + get_inputfuncs -> Core.Commands.Get + get_value -> Char.Value.Get + repeat -> Char.Repeat.Update + monitor -> Char.Monitor.Update """ + + if cmdname in EVENNIA_TO_GMCP: + gmcp_cmdname = EVENNIA_TO_GMCP[cmdname] + elif "_" in cmdname: + gmcp_cmdname = ".".join(word.capitalize() for word in cmdname.split("_")) + else: + gmcp_cmdname = "Custom.%s" % cmdname.capitalize() + if not (args or kwargs): - gmcp_string = cmdname + gmcp_string = gmcp_cmdname elif args: if len(args) == 1: args = args[0] if kwargs: - gmcp_string = "%s %s" % (cmdname, json.dumps([args, kwargs])) + gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps([args, kwargs])) else: - gmcp_string = "%s %s" % (cmdname, json.dumps(args)) + gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps(args)) else: # only kwargs - gmcp_string = "%s %s" % (cmdname, json.dumps(kwargs)) + gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps(kwargs)) # print("gmcp string", gmcp_string) # DEBUG return gmcp_string @@ -398,14 +415,9 @@ class TelnetOOB(object): kwargs.pop("options", None) if self.MSDP: - msdp_cmdname = cmdname - encoded_oob = self.encode_msdp(msdp_cmdname, *args, **kwargs) + encoded_oob = self.encode_msdp(cmdname, *args, **kwargs) self.protocol._write(IAC + SB + MSDP + encoded_oob + IAC + SE) if self.GMCP: - if cmdname in EVENNIA_TO_GMCP: - gmcp_cmdname = EVENNIA_TO_GMCP[cmdname] - else: - gmcp_cmdname = "Custom.Cmd" - encoded_oob = self.encode_gmcp(gmcp_cmdname, *args, **kwargs) + encoded_oob = self.encode_gmcp(cmdname, *args, **kwargs) self.protocol._write(IAC + SB + GMCP + encoded_oob + IAC + SE)