From 25ae0739ed70be8b6a46bdc98aee4b7e33f478ab Mon Sep 17 00:00:00 2001 From: red-001 Date: Sat, 10 Jun 2017 12:49:44 +0100 Subject: [PATCH] Add a server-sided way to remove color codes from incoming chat messages (#5948) 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 | 4 ++++ minetest.conf.example | 14 +++++++------- src/defaultsettings.cpp | 1 + src/server.cpp | 7 +++++-- src/server.h | 2 +- src/settings_translation_file.cpp | 13 +++++++------ 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 08cc1fff2..0f2715ab5 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -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). diff --git a/minetest.conf.example b/minetest.conf.example index c43076459..2487dad34 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -344,8 +344,8 @@ # 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 + diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 53fdc2f18..c10d2cb02 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -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"); diff --git a/src/server.cpp b/src/server.cpp index 52eb97608..179147637 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -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 clients = m_clients.getClientIDs(); diff --git a/src/server.h b/src/server.h index 56706bc61..0ad5dd97a 100644 --- a/src/server.h +++ b/src/server.h @@ -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); diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index bc149aed4..3cd0755a6 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -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");