From 32194e88fb609fa1ac407741cc7d24b8ad490c17 Mon Sep 17 00:00:00 2001 From: Resaec Date: Mon, 14 Oct 2024 19:51:47 +0200 Subject: [PATCH 1/2] Fix up some chat commands --- .../psforever/actors/session/normal/ChatLogic.scala | 2 +- .../actors/session/support/ChatOperations.scala | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala index e701c0a5..98caca15 100644 --- a/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/normal/ChatLogic.scala @@ -234,7 +234,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext ) ) } - result + true // do not accidentally send mistyped commands to chat } else { false // not a handled command } diff --git a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala index 02efbc7e..bb158591 100644 --- a/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala +++ b/src/main/scala/net/psforever/actors/session/support/ChatOperations.scala @@ -603,8 +603,9 @@ class ChatOperations( } def commandAddCertification(session: Session, message: ChatMsg, contents: String): Unit = { - val certs = cliTokenization(contents).map(name => Certification.values.find(_.name == name)) - val result = if (certs.nonEmpty) { + val tokens = cliTokenization(contents) + val certs = tokens.map(name => Certification.values.find(_.name == name)) + val result = if (tokens.nonEmpty) { if (certs.contains(None)) { s"@AckErrorCertifications" } else { @@ -623,7 +624,7 @@ class ChatOperations( } def commandKick(session: Session, message: ChatMsg, contents: String): Unit = { - val inputs = cliTokenization(contents) + val inputs = cliTokenizationCaseSensitive(contents) inputs.headOption match { case Some(input) => val determination: Player => Boolean = input.toLongOption match { @@ -1269,7 +1270,11 @@ class ChatOperations( } def cliTokenization(str: String): List[String] = { - str.replaceAll("\\s+", " ").toLowerCase.trim.split("\\s").toList + str.replaceAll("\\s+", " ").toLowerCase.trim.split("\\s").toList.filter(!_.equals("")) + } + + def cliTokenizationCaseSensitive(str: String): List[String] = { + str.replaceAll("\\s+", " ").trim.split("\\s").toList.filter(!_.equals("")) } def commandIncomingSend(message: ChatMsg): Unit = { From b63e402003bbe90426da09a697e5b00d58527dc8 Mon Sep 17 00:00:00 2001 From: Resaec Date: Wed, 11 Jun 2025 00:11:49 +0200 Subject: [PATCH 2/2] prevent ! commands from getting send to chat if no handler was found --- .../psforever/actors/session/csr/ChatLogic.scala | 2 +- .../actors/session/spectator/ChatLogic.scala | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala index e7a5a9c1..24c5c885 100644 --- a/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/csr/ChatLogic.scala @@ -236,7 +236,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext message.note ) ) - false + true } } else { false diff --git a/src/main/scala/net/psforever/actors/session/spectator/ChatLogic.scala b/src/main/scala/net/psforever/actors/session/spectator/ChatLogic.scala index a75ea4dc..ae285706 100644 --- a/src/main/scala/net/psforever/actors/session/spectator/ChatLogic.scala +++ b/src/main/scala/net/psforever/actors/session/spectator/ChatLogic.scala @@ -143,7 +143,18 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext case "list" => ops.customCommandList(session, params, message) case "nearby" => ops.customCommandNearby(session) case "loc" => ops.customCommandLoc(session, message) - case _ => false + case _ => + // command was not handled + sendResponse( + ChatMsg( + ChatMessageType.CMT_GMOPEN, // CMT_GMTELL + message.wideContents, + "Server", + s"Unknown command !$command", + message.note + ) + ) + true } } else { false