Add a server-sided way to remove color codes from incoming chat messages (#5948)
authorred-001 <red-001@outlook.ie>
Sat, 10 Jun 2017 11:49:44 +0000 (12:49 +0100)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sat, 10 Jun 2017 11:49:44 +0000 (13:49 +0200)
These code be generated by CSM, a modded client or just copy and pasted by the player.

Changes
- Update configuration example and setting translation file.
- Remove colour codes before logging chat.
- Add setting to remove colour codes before processing the chat.

builtin/settingtypes.txt
minetest.conf.example
src/defaultsettings.cpp
src/server.cpp
src/server.h
src/settings_translation_file.cpp

index 08cc1fff2abe5562796f8d35aa5169264e971143..0f2715ab5e9a7ab7063c73fdc07fdba3935d7dc4 100644 (file)
@@ -721,6 +721,10 @@ server_announce (Announce server) bool false
 #    If you want to announce your ipv6 address, use  serverlist_url = v6.servers.minetest.net.
 serverlist_url (Serverlist URL) string servers.minetest.net
 
+# Remove color codes from incoming chat messages
+# Use this to stop players from being able to use color in their messages
+strip_color_codes (Strip color codes) bool false
+
 [*Network]
 
 #    Network port to listen (UDP).
index c430764597673884fb1aec23c755b28be2848d56..2487dad3449bf2bf58a510e65df34d52f3295e03 100644 (file)
 # serverlist_file = favoriteservers.txt
 
 #    Maximum size of the out chat queue. 0 to disable queueing and -1 to make the queue size unlimited
-#    type: int min: -1
-max_out_chat_queue_size = 20
+#    type: int
+max_out_chat_queue_size = 20
 
 ## Graphics
 
@@ -555,7 +555,7 @@ max_out_chat_queue_size = 20
 #    type: int
 # screen_h = 600
 
-#    Save the window size automatically when modified.
+#    Save window size automatically when modified.
 #    type: bool
 # autosave_screensize = true
 
@@ -867,11 +867,10 @@ max_out_chat_queue_size = 20
 #    type: string
 # serverlist_url = servers.minetest.net
 
-#    Disable escape sequences, e.g. chat coloring.
-#    Use this if you want to run a server with pre-0.4.14 clients and you want to disable
-#    the escape sequences generated by mods.
+#    Remove color codes from incoming chat messages
+#    Use this to stop players from being able to use color in their messages
 #    type: bool
-# disable_escape_sequences = false
+# strip_color_codes = false
 
 ## Network
 
@@ -1841,3 +1840,4 @@ max_out_chat_queue_size = 20
 #    Print the engine's profiling data in regular intervals (in seconds). 0 = disable. Useful for developers.
 #    type: int
 # profiler_print_interval = 0
+
index 53fdc2f18424291fa19d5469d10379572dd206e9..c10d2cb02fe2e7cb0e0978693d9e748652481a0b 100644 (file)
@@ -252,6 +252,7 @@ void set_default_settings(Settings *settings)
 
        // Server
        settings->setDefault("disable_escape_sequences", "false");
+       settings->setDefault("strip_color_codes", "false");
 
        // Network
        settings->setDefault("enable_ipv6", "true");
index 52eb9760867bc5a3e35872f60ccd8a72fd2c5ba9..179147637a62281bae44fb6da6fa7456cf01264d 100644 (file)
@@ -2880,12 +2880,15 @@ void Server::handleChatInterfaceEvent(ChatEvent *evt)
 }
 
 std::wstring Server::handleChat(const std::string &name, const std::wstring &wname,
-       const std::wstring &wmessage, bool check_shout_priv, RemotePlayer *player)
+       std::wstring wmessage, bool check_shout_priv, RemotePlayer *player)
 {
        // If something goes wrong, this player is to blame
        RollbackScopeActor rollback_scope(m_rollback,
                std::string("player:") + name);
 
+       if (g_settings->getBool("strip_color_codes"))
+               wmessage = unescape_enriched(wmessage);
+
        if (player) {
                switch (player->canSendChatMessage()) {
                        case RPLAYER_CHATRESULT_FLOODING: {
@@ -2940,7 +2943,7 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
                /*
                        Send the message to others
                */
-               actionstream << "CHAT: " << wide_to_narrow(line) << std::endl;
+               actionstream << "CHAT: " << wide_to_narrow(unescape_enriched(line)) << std::endl;
 
                std::vector<u16> clients = m_clients.getClientIDs();
 
index 56706bc61a0b7b0ba71211cb3474ff0aabb2aa22..0ad5dd97acf2d9d1ee8d9cd10cf3b15d9ea82132 100644 (file)
@@ -488,7 +488,7 @@ private:
 
        // This returns the answer to the sender of wmessage, or "" if there is none
        std::wstring handleChat(const std::string &name, const std::wstring &wname,
-               const std::wstring &wmessage,
+               std::wstring wmessage_input,
                bool check_shout_priv = false,
                RemotePlayer *player = NULL);
        void handleAdminChat(const ChatEventChat *evt);
index bc149aed4a07e7b7ffca85f977767a48a4bb464f..3cd0755a641a085c8a8709ca07398fd90df6cb4d 100644 (file)
@@ -87,7 +87,7 @@ fake_function() {
        gettext("Key for increasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
        gettext("Dec. volume key");
        gettext("Key for decreasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
-       gettext("Autoforward key");
+       gettext("Automatic forwards key");
        gettext("Key for toggling autoforward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
        gettext("Cinematic mode key");
        gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
@@ -140,6 +140,8 @@ fake_function() {
        gettext("URL to the server list displayed in the Multiplayer Tab.");
        gettext("Serverlist file");
        gettext("File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.");
+       gettext("Maximum size of the out chat queue");
+       gettext("Maximum size of the out chat queue. 0 to disable queueing and -1 to make the queue size unlimited");
        gettext("Graphics");
        gettext("In-Game");
        gettext("Basic");
@@ -229,6 +231,8 @@ fake_function() {
        gettext("Width component of the initial window size.");
        gettext("Screen height");
        gettext("Height component of the initial window size.");
+       gettext("Autosave Screen Size");
+       gettext("Save window size automatically when modified.");
        gettext("Full screen");
        gettext("Fullscreen mode.");
        gettext("Full screen BPP");
@@ -249,8 +253,6 @@ fake_function() {
        gettext("Height on which clouds are appearing.");
        gettext("Cloud radius");
        gettext("Radius of cloud area stated in number of 64 node cloud squares.\nValues larger than 26 will start to produce sharp cutoffs at cloud area corners.");
-       gettext("Enable view bobbing");
-       gettext("Enables view bobbing when walking.");
        gettext("View bobbing factor");
        gettext("Enable view bobbing and amount of view bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
        gettext("Fall bobbing factor");
@@ -362,8 +364,8 @@ fake_function() {
        gettext("Automaticaly report to the serverlist.");
        gettext("Serverlist URL");
        gettext("Announce to this serverlist.\nIf you want to announce your ipv6 address, use  serverlist_url = v6.servers.minetest.net.");
-       gettext("Disable escape sequences");
-       gettext("Disable escape sequences, e.g. chat coloring.\nUse this if you want to run a server with pre-0.4.14 clients and you want to disable\nthe escape sequences generated by mods.");
+       gettext("Strip color codes");
+       gettext("Remove color codes from incoming chat messages\nUse this to stop players from being able to use color in their messages");
        gettext("Network");
        gettext("Server port");
        gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu.");
@@ -452,7 +454,6 @@ fake_function() {
        gettext("Fast mode speed");
        gettext("Climbing speed");
        gettext("Jumping speed");
-       gettext("Descending speed");
        gettext("Liquid fluidity");
        gettext("Liquid fluidity smoothing");
        gettext("Liquid sink");