remove all control characters from chat messages

This commit is contained in:
tour 2024-01-04 12:41:03 +01:00
parent ff26c1c27a
commit cf33877a6e

View File

@ -15,6 +15,11 @@ minetest.register_on_leaveplayer(function(player)
end)
local function chat_escape(text) -- remove all control characters to prevent malformed chat messages
return string.gsub(text, "%c", "")
end
-- show a formspec to a player
function chat_formspec.show_to_target(sendername, targetname, fs)
if not targetname then
@ -22,18 +27,18 @@ function chat_formspec.show_to_target(sendername, targetname, fs)
end
local target = minetest.get_player_by_name(targetname)
if not target then
minetest.chat_send_player(sendername, targetname .. " is not online")
minetest.chat_send_player(sendername, chat_escape(targetname .. " is not online"))
return
end
if target:get_hp() == 0 then
minetest.chat_send_player(sendername, targetname .. " is dead. We cannot send them a formspec without removing their respawn-formspec. Please try again later")
minetest.chat_send_player(sendername, chat_escape(targetname .. " is dead. We cannot send them a formspec without removing their respawn-formspec. Please try again later"))
return
end
minetest.show_formspec(targetname, "chat_formspec:target_fs", fs)
local context = get_context(targetname)
context.sender = sendername
context.fs = fs
minetest.chat_send_player(sendername, "formspec send to " .. targetname)
minetest.chat_send_player(sendername, chat_escape("formspec send to " .. targetname))
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
@ -47,7 +52,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
chat_formspec.show_misc(name, "replant_help")
elseif minetest.get_player_by_name(sendername) then
local answer = fields.answer or ""
minetest.chat_send_player(sendername, "chat formspec: " .. name .. " answered with \"" .. answer .. "\"")
minetest.chat_send_player(sendername, chat_escape("chat formspec: " .. name ..
" answered with \"" .. answer .. "\""))
end
if fields.quit then
clear_context(name)