From 5325046be69066c1fbdadc25a0506fedd920ea67 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:30:11 +0000 Subject: [PATCH 1/9] Fix GMCP error caused by External.Discord.Get Eat External.Discord.Get in UserTelnet instead of forwarding it to MUME. MUME does not support External.Discord.Get and responds with a MUME.Client.Error, which MMapper was displaying as a protocol error. --- src/proxy/GmcpMessage.h | 6 +++++- src/proxy/UserTelnet.cpp | 5 +++++ tests/TestProxy.cpp | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/proxy/GmcpMessage.h b/src/proxy/GmcpMessage.h index 806e3b4a1..0cb84d277 100644 --- a/src/proxy/GmcpMessage.h +++ b/src/proxy/GmcpMessage.h @@ -31,6 +31,10 @@ class ParseEvent; X(EVENT_MOVED, EventMoved, "event.moved", "Event.Moved") \ X(EVENT_MOON, EventMoon, "event.moon", "Event.Moon") \ X(EVENT_SUN, EventSun, "event.sun", "Event.Sun") \ + X(EXTERNAL_DISCORD_GET, \ + ExternalDiscordGet, \ + "external.discord.get", \ + "External.Discord.Get") \ X(EXTERNAL_DISCORD_HELLO, \ ExternalDiscordHello, \ "external.discord.hello", \ @@ -66,7 +70,7 @@ enum class NODISCARD GmcpMessageTypeEnum { #define X_COUNT(...) +1 static constexpr const size_t NUM_GMCP_MESSAGES = XFOREACH_GMCP_MESSAGE_TYPE(X_COUNT); #undef X_COUNT -static_assert(NUM_GMCP_MESSAGES == 30); +static_assert(NUM_GMCP_MESSAGES == 31); DEFINE_ENUM_COUNT(GmcpMessageTypeEnum, NUM_GMCP_MESSAGES) namespace tags { diff --git a/src/proxy/UserTelnet.cpp b/src/proxy/UserTelnet.cpp index e02e2fdb3..9db1f2292 100644 --- a/src/proxy/UserTelnet.cpp +++ b/src/proxy/UserTelnet.cpp @@ -164,6 +164,11 @@ void UserTelnet::virt_receiveGmcpMessage(const GmcpMessage &msg) return; } + // Eat External.Discord.Get as MUME does not support it and would return a MUME.Client.Error + if (msg.isExternalDiscordGet()) { + return; + } + const bool requiresRewrite = msg.getJson() && (msg.isCoreSupportsAdd() || msg.isCoreSupportsSet() || msg.isCoreSupportsRemove()) diff --git a/tests/TestProxy.cpp b/tests/TestProxy.cpp index 077d9b0e4..c39dcf59d 100644 --- a/tests/TestProxy.cpp +++ b/tests/TestProxy.cpp @@ -34,6 +34,12 @@ void TestProxy::gmcpMessageDeserializeTest() GmcpMessage gmcp3 = GmcpMessage::fromRawBytes(R"(External.Discord.Hello)"); QCOMPARE(gmcp3.getName().toQByteArray(), QByteArray("External.Discord.Hello")); QVERIFY(!gmcp3.getJson()); + QVERIFY(gmcp3.isExternalDiscordHello()); + + GmcpMessage gmcp4 = GmcpMessage::fromRawBytes(R"(External.Discord.Get)"); + QCOMPARE(gmcp4.getName().toQByteArray(), QByteArray("External.Discord.Get")); + QVERIFY(!gmcp4.getJson()); + QVERIFY(gmcp4.isExternalDiscordGet()); } void TestProxy::gmcpMessageSerializeTest() From 5890c75afeb60043a547b1a1d662f1f0e0d32ce1 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:35:06 +0000 Subject: [PATCH 2/9] Fix GMCP error caused by External.Discord.Get Eat External.Discord.Get in UserTelnet instead of forwarding it to MUME. MUME does not support External.Discord.Get and responds with a MUME.Client.Error, which MMapper was displaying as a protocol error. --- src/proxy/GmcpMessage.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/proxy/GmcpMessage.h b/src/proxy/GmcpMessage.h index 0cb84d277..8cd11b799 100644 --- a/src/proxy/GmcpMessage.h +++ b/src/proxy/GmcpMessage.h @@ -31,10 +31,7 @@ class ParseEvent; X(EVENT_MOVED, EventMoved, "event.moved", "Event.Moved") \ X(EVENT_MOON, EventMoon, "event.moon", "Event.Moon") \ X(EVENT_SUN, EventSun, "event.sun", "Event.Sun") \ - X(EXTERNAL_DISCORD_GET, \ - ExternalDiscordGet, \ - "external.discord.get", \ - "External.Discord.Get") \ + X(EXTERNAL_DISCORD_GET, ExternalDiscordGet, "external.discord.get", "External.Discord.Get") \ X(EXTERNAL_DISCORD_HELLO, \ ExternalDiscordHello, \ "external.discord.hello", \ From 05c02d332e765d335ca666524b063aedcaea6d0d Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:04:20 +0000 Subject: [PATCH 3/9] Fix GMCP error caused by External.Discord.Get Eat External.Discord.Get in UserTelnet instead of forwarding it to MUME. MUME does not support External.Discord.Get and responds with a MUME.Client.Error, which MMapper was displaying as a protocol error. From 2d2e5de0d46fc13ba8942fc7b38d3701d79efb21 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:22:52 +0000 Subject: [PATCH 4/9] Fix GMCP error caused by External.Discord.Get Eat External.Discord.Get in UserTelnet instead of forwarding it to MUME. MUME does not support External.Discord.Get and responds with a MUME.Client.Error, which MMapper was displaying as a protocol error. From 13365741a550dee1e3a70a121816d666d9736b31 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:26:59 +0000 Subject: [PATCH 5/9] Fix GMCP error caused by External.Discord.Get Eat External.Discord.Get in UserTelnet instead of forwarding it to MUME. MUME does not support External.Discord.Get and responds with a MUME.Client.Error. In addition, log MUME.Client.Error internally rather than printing it to the user's game text console. --- src/proxy/proxy.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/proxy/proxy.cpp b/src/proxy/proxy.cpp index 0d269daaa..f56eb3027 100644 --- a/src/proxy/proxy.cpp +++ b/src/proxy/proxy.cpp @@ -544,9 +544,7 @@ void Proxy::allocMudTelnet() } void virt_onMumeClientError(const QString &errmsg) final { - qInfo() << errmsg; - getProxy().sendToUser(SendToUserSourceEnum::FromMMapper, - QString("MUME.Client protocol error: %1").arg(errmsg)); + qWarning() << "MUME.Client protocol error:" << errmsg; } }; From f3cc103dfac361e76aa6afc6e15fbfce94c287d5 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:44:36 +0000 Subject: [PATCH 6/9] Add EXTERNAL_DISCORD_GET GMCP message type Register External.Discord.Get as a known GMCP message type so that it is correctly recognized and relayed directly to MUME over the proxy. --- src/proxy/UserTelnet.cpp | 5 ----- src/proxy/proxy.cpp | 4 +++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/proxy/UserTelnet.cpp b/src/proxy/UserTelnet.cpp index 9db1f2292..e02e2fdb3 100644 --- a/src/proxy/UserTelnet.cpp +++ b/src/proxy/UserTelnet.cpp @@ -164,11 +164,6 @@ void UserTelnet::virt_receiveGmcpMessage(const GmcpMessage &msg) return; } - // Eat External.Discord.Get as MUME does not support it and would return a MUME.Client.Error - if (msg.isExternalDiscordGet()) { - return; - } - const bool requiresRewrite = msg.getJson() && (msg.isCoreSupportsAdd() || msg.isCoreSupportsSet() || msg.isCoreSupportsRemove()) diff --git a/src/proxy/proxy.cpp b/src/proxy/proxy.cpp index f56eb3027..0d269daaa 100644 --- a/src/proxy/proxy.cpp +++ b/src/proxy/proxy.cpp @@ -544,7 +544,9 @@ void Proxy::allocMudTelnet() } void virt_onMumeClientError(const QString &errmsg) final { - qWarning() << "MUME.Client protocol error:" << errmsg; + qInfo() << errmsg; + getProxy().sendToUser(SendToUserSourceEnum::FromMMapper, + QString("MUME.Client protocol error: %1").arg(errmsg)); } }; From 9ae3e68a79e9cf055294bfd49e6890ded7e7b7fb Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:46:43 +0000 Subject: [PATCH 7/9] Add EXTERNAL_DISCORD_GET GMCP message type Register External.Discord.Get as a known GMCP message type so that it is recognized into an enum and passed through directly between the user client and MUME. From d904945ae35bd4244403612b61987e10d78ef857 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:53:03 +0000 Subject: [PATCH 8/9] Add EXTERNAL_DISCORD_GET GMCP message type Register External.Discord.Get as a known GMCP message type so that it is recognized into an enum and passed directly through between the user client and MUME. --- src/proxy/proxy.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/proxy/proxy.cpp b/src/proxy/proxy.cpp index 0d269daaa..f56eb3027 100644 --- a/src/proxy/proxy.cpp +++ b/src/proxy/proxy.cpp @@ -544,9 +544,7 @@ void Proxy::allocMudTelnet() } void virt_onMumeClientError(const QString &errmsg) final { - qInfo() << errmsg; - getProxy().sendToUser(SendToUserSourceEnum::FromMMapper, - QString("MUME.Client protocol error: %1").arg(errmsg)); + qWarning() << "MUME.Client protocol error:" << errmsg; } }; From f5245d812e90c79e29d0790744159bdbf940ac36 Mon Sep 17 00:00:00 2001 From: nschimme <5505185+nschimme@users.noreply.github.com> Date: Mon, 14 Sep 2026 17:19:24 +0000 Subject: [PATCH 9/9] Add EXTERNAL_DISCORD_GET GMCP message type Register External.Discord.Get as a known GMCP message type so that it is recognized into an enum and passed directly through between the user client and MUME. Also log out-of-band MUME.Client.Error messages via qWarning rather than displaying them in the user text stream.