diff --git a/src/callback.lua b/src/callback.lua index 95fc8e2..a1fbd24 100644 --- a/src/callback.lua +++ b/src/callback.lua @@ -27,6 +27,68 @@ irc.register_callback("channel_msg", function ( channel, from, message ) end end); +mt_irc.bot_commands = { + help = { + func = function ( from, args ) + irc.say(from, "HELP:"); + irc.say(from, ">username message"); + irc.say(from, " Send private message to "); + irc.say(from, "!who"); + irc.say(from, " Return list of players currently in-game"); + irc.say(from, "!help"); + irc.say(from, " Show this help message"); + end; + }; + who = { + func = function ( from, args ) + local s = ""; + for k, v in pairs(mt_irc.connected_players) do + if (v) then + s = s.." "..k; + end + end + irc.say(from, "Players On Channel:"..s); + end; + }; + whereis = { + -- !whereis PLAYER + func = function ( from, args ) + if (args == "") then + irc.say(from, "Usage: !whereis PLAYER"); + return; + end + local list = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 100000); + for _, obj in ipairs(list) do + if (obj:is_player() and (obj:get_player_name() == args)) then + local fmt = "Player %s is at (%.2f,%.2f,%.2f)"; + local pos = obj:getpos(); + irc.say(from, fmt:format(args, pos.x, pos.y, pos.z)); + end + end + end; + }; +}; + +local function bot_command ( from, message ) + + local pos = message:find(" ", 1, true); + local cmd, args; + if (pos) then + cmd = message:sub(1, pos - 1); + args = message:sub(pos + 1); + else + cmd = message; + args = ""; + end + + if (not mt_irc.bot_commands[cmd]) then + irc.say(from, "Unknown command `"..cmd.."'. Try `!help'."); + end + + mt_irc.bot_commands[cmd].func(from, args); + +end + irc.register_callback("private_msg", function ( from, message ) if (not mt_irc.connect_ok) then return; end local player_to; @@ -36,8 +98,11 @@ irc.register_callback("private_msg", function ( from, message ) if (not pos) then return; end player_to = message:sub(2, pos - 1); msg = message:sub(pos + 1); + elseif (message:sub(1, 1) == "!") then + bot_command(from, message:sub(2)); + return; else - irc.say(from, 'Please use the ">username message" syntax.'); + irc.say(from, 'Message not sent! Please use "!help" to see possible commands.'); return; end if (not mt_irc.connected_players[player_to]) then