]> git.lizzy.rs Git - minetest.git/commitdiff
Chatcommands: Show the execution time if the command takes a long time (#10472)
authorHybridDog <3192173+HybridDog@users.noreply.github.com>
Sat, 13 Mar 2021 10:18:25 +0000 (11:18 +0100)
committerGitHub <noreply@github.com>
Sat, 13 Mar 2021 10:18:25 +0000 (11:18 +0100)
builtin/game/chat.lua
builtin/settingtypes.txt

index e05e83a275e1208d348f3cd902ebc1fb5852d5d1..bf2d7851e56e893e572f39d2625cd1acb66a7440 100644 (file)
@@ -47,6 +47,8 @@ end
 
 core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY
 
+local msg_time_threshold =
+       tonumber(core.settings:get("chatcommand_msg_time_threshold")) or 0.1
 core.register_on_chat_message(function(name, message)
        if message:sub(1,1) ~= "/" then
                return
@@ -73,7 +75,9 @@ core.register_on_chat_message(function(name, message)
        local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs)
        if has_privs then
                core.set_last_run_mod(cmd_def.mod_origin)
+               local t_before = minetest.get_us_time()
                local success, result = cmd_def.func(name, param)
+               local delay = (minetest.get_us_time() - t_before) / 1000000
                if success == false and result == nil then
                        core.chat_send_player(name, "-!- "..S("Invalid command usage."))
                        local help_def = core.registered_chatcommands["help"]
@@ -83,8 +87,20 @@ core.register_on_chat_message(function(name, message)
                                        core.chat_send_player(name, helpmsg)
                                end
                        end
-               elseif result then
-                       core.chat_send_player(name, result)
+               else
+                       if delay > msg_time_threshold then
+                               -- Show how much time it took to execute the command
+                               if result then
+                                       result = result ..
+                                               minetest.colorize("#f3d2ff", " (%.5g s)"):format(delay)
+                               else
+                                       result = minetest.colorize("#f3d2ff",
+                                               "Command execution took %.5f s"):format(delay)
+                               end
+                       end
+                       if result then
+                               core.chat_send_player(name, result)
+                       end
                end
        else
                core.chat_send_player(name,
index 62f1ee2d0ee58bf50742013cb5cc0a0b809ab0be..75efe64daa681a13d30c7c9bae19b40d75a26a94 100644 (file)
@@ -1136,6 +1136,10 @@ enable_rollback_recording (Rollback recording) bool false
 #    @name, @message, @timestamp (optional)
 chat_message_format (Chat message format) string <@name> @message
 
+#    If the execution of a chat command takes longer than this specified time in
+#    seconds, add the time information to the chat command message
+chatcommand_msg_time_threshold (Chat command time message threshold) float 0.1
+
 #    A message to be displayed to all clients when the server shuts down.
 kick_msg_shutdown (Shutdown message) string Server shutting down.