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.
This commit is contained in:
red-001 2017-06-10 12:49:44 +01:00 committed by SmallJoker
parent 14b039f0b4
commit 0664b5f772
6 changed files with 23 additions and 15 deletions

View 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. # If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net.
serverlist_url (Serverlist URL) string 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]
# Network port to listen (UDP). # Network port to listen (UDP).

View File

@ -344,8 +344,8 @@
# serverlist_file = favoriteservers.txt # serverlist_file = favoriteservers.txt
# Maximum size of the out chat queue. 0 to disable queueing and -1 to make the queue size unlimited # Maximum size of the out chat queue. 0 to disable queueing and -1 to make the queue size unlimited
# type: int min: -1 # type: int
max_out_chat_queue_size = 20 # max_out_chat_queue_size = 20
## Graphics ## Graphics
@ -555,7 +555,7 @@ max_out_chat_queue_size = 20
# type: int # type: int
# screenH = 600 # screenH = 600
# Save the window size automatically when modified. # Save window size automatically when modified.
# type: bool # type: bool
# autosave_screensize = true # autosave_screensize = true
@ -867,11 +867,10 @@ max_out_chat_queue_size = 20
# type: string # type: string
# serverlist_url = servers.minetest.net # serverlist_url = servers.minetest.net
# Disable escape sequences, e.g. chat coloring. # Remove color codes from incoming chat messages
# Use this if you want to run a server with pre-0.4.14 clients and you want to disable # Use this to stop players from being able to use color in their messages
# the escape sequences generated by mods.
# type: bool # type: bool
# disable_escape_sequences = false # strip_color_codes = false
## Network ## 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. # Print the engine's profiling data in regular intervals (in seconds). 0 = disable. Useful for developers.
# type: int # type: int
# profiler_print_interval = 0 # profiler_print_interval = 0

View File

@ -252,6 +252,7 @@ void set_default_settings(Settings *settings)
// Server // Server
settings->setDefault("disable_escape_sequences", "false"); settings->setDefault("disable_escape_sequences", "false");
settings->setDefault("strip_color_codes", "false");
// Network // Network
settings->setDefault("enable_ipv6", "true"); settings->setDefault("enable_ipv6", "true");

View File

@ -2873,12 +2873,15 @@ void Server::handleChatInterfaceEvent(ChatEvent *evt)
} }
std::wstring Server::handleChat(const std::string &name, const std::wstring &wname, 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 // If something goes wrong, this player is to blame
RollbackScopeActor rollback_scope(m_rollback, RollbackScopeActor rollback_scope(m_rollback,
std::string("player:") + name); std::string("player:") + name);
if (g_settings->getBool("strip_color_codes"))
wmessage = unescape_enriched(wmessage);
if (player) { if (player) {
switch (player->canSendChatMessage()) { switch (player->canSendChatMessage()) {
case RPLAYER_CHATRESULT_FLOODING: { case RPLAYER_CHATRESULT_FLOODING: {
@ -2933,7 +2936,7 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
/* /*
Send the message to others 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(); std::vector<u16> clients = m_clients.getClientIDs();

View File

@ -486,7 +486,7 @@ private:
// This returns the answer to the sender of wmessage, or "" if there is none // 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, std::wstring handleChat(const std::string &name, const std::wstring &wname,
const std::wstring &wmessage, std::wstring wmessage_input,
bool check_shout_priv = false, bool check_shout_priv = false,
RemotePlayer *player = NULL); RemotePlayer *player = NULL);
void handleAdminChat(const ChatEventChat *evt); void handleAdminChat(const ChatEventChat *evt);

View File

@ -34,7 +34,7 @@ fake_function() {
gettext("Random input"); gettext("Random input");
gettext("Enable random user input (only used for testing)."); gettext("Enable random user input (only used for testing).");
gettext("Continuous forward"); gettext("Continuous forward");
gettext("Continuous forward movement (only used for testing)."); gettext("Continuous forward movement, toggled by autoforward key.");
gettext("Enable Joysticks"); gettext("Enable Joysticks");
gettext("Enable Joysticks"); gettext("Enable Joysticks");
gettext("Joystick ID"); gettext("Joystick ID");
@ -87,8 +87,8 @@ fake_function() {
gettext("Key for increasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); gettext("Key for increasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
gettext("Dec. volume key"); gettext("Dec. volume key");
gettext("Key for decreasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); gettext("Key for decreasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
gettext("Autorun key"); gettext("Autoforward key");
gettext("Key for toggling autorun.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); gettext("Key for toggling autoforward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
gettext("Cinematic mode key"); gettext("Cinematic mode key");
gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
gettext("Minimap key"); gettext("Minimap key");
@ -362,8 +362,8 @@ fake_function() {
gettext("Automaticaly report to the serverlist."); gettext("Automaticaly report to the serverlist.");
gettext("Serverlist URL"); gettext("Serverlist URL");
gettext("Announce to this serverlist.\nIf you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net."); 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("Strip color codes");
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("Remove color codes from incoming chat messages\nUse this to stop players from being able to use color in their messages");
gettext("Network"); gettext("Network");
gettext("Server port"); gettext("Server port");
gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu."); gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu.");