From f650533614551fde3f7bc91311372a0288d6e755 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 17 Aug 2021 20:25:00 +0200 Subject: [PATCH] Keep GMCP case if outputfunc is capitalized. Resolve #2300. --- CHANGELOG.md | 2 ++ evennia/server/portal/telnet_oob.py | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c0bab7c69..1700f28e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,8 @@ Up requirements to Django 3.2+ obj (avoids mistakenly assigning an AccountDB-typeclass to a Character etc). - Merged `script` and `scripts` commands into one, for both managing global- and on-object Scripts. Moved `CmdScripts` and `CmdObjects` to `commands/default/building.py`. +- Keep GMCP function case if outputfunc starts with capital letter (so `cmd_name` -> `Cmd.Name` + but `Cmd_nAmE` -> `Cmd.nAmE`). This helps e.g Mudlet's legacy `Client_GUI` implementation) ### Evennia 0.9.5 (2019-2020) diff --git a/evennia/server/portal/telnet_oob.py b/evennia/server/portal/telnet_oob.py index 4734b72c95..7b709d6348 100644 --- a/evennia/server/portal/telnet_oob.py +++ b/evennia/server/portal/telnet_oob.py @@ -230,12 +230,16 @@ class TelnetOOB: be stripped on the Evennia side. :: - [cmd.name, [], {}] -> Cmd.Name - [cmd.name, [arg], {}] -> Cmd.Name arg - [cmd.name, [args],{}] -> Cmd.Name [args] - [cmd.name, [], {kwargs}] -> Cmd.Name {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}] -> Core.Cmdname [[args],{kwargs}] + For more flexibility with certain clients, if `cmd_name` is capitalized, + Evennia will leave its current capitalization (So CMD_nAmE would be sent + as CMD.nAmE but cMD_Name would be Cmd.Name) + Notes: There are also a few default mappings between evennia outputcmds and GMCP: :: @@ -251,9 +255,13 @@ class TelnetOOB: 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("_")) + if cmdname.istitle(): + # leave without capitalization + gmcp_cmdname = ".".join(word for word in cmdname.split("_")) + else: + gmcp_cmdname = ".".join(word.capitalize() for word in cmdname.split("_")) else: - gmcp_cmdname = "Core.%s" % cmdname.capitalize() + gmcp_cmdname = "Core.%s" % (cmdname if cmdname.istitle() else cmdname.capitalize()) if not (args or kwargs): gmcp_string = gmcp_cmdname