diff --git a/init.lua b/init.lua index 983f8e1..0220226 100644 --- a/init.lua +++ b/init.lua @@ -1,76 +1,83 @@ + irc_users = {} +local function notify(nick, message) + return mt_irc:queueMsg(mt_irc.msgs.privmsg(nick, message)) +end + local old_chat_send_player = minetest.chat_send_player minetest.chat_send_player = function(name, message) - for nick, user in pairs(irc_users) do - if name == user then - mt_irc.say(nick, message) + for nick, logedInAs in pairs(irc_users) do + if name == logedInAs and not minetest.get_player_by_name(name) then + notify(nick, message) end end return old_chat_send_player(name, message) end -mt_irc.register_callback("nick_change", function (old_nick, new_nick) - for nick, user in pairs(irc_users) do - if nick == old_nick then - irc_users[new_nick] = irc_users[old_nick] - irc_users[old_nick] = nil +mt_irc:register_hook("NickChange", function(user, newNick) + for nick, player in pairs(irc_users) do + if nick == user.nick then + irc_users[newNick] = irc_users[user.nick] + irc_users[user.nick] = nil end end end) -mt_irc.register_callback("part", function (nick, part_msg) - if irc_users[nick] then - irc_users[nick] = nil - end +mt_irc:register_hook("OnQuit", function(user, reason) + irc_users[user.nick] = nil end) -mt_irc.register_bot_command("login", { +mt_irc:register_bot_command("login", { params = " ", description = "Login as a user to run commands", - func = function (from, args) + func = function(user, args) if args == "" then - mt_irc.say(from, "You need a username and password") + notify(user.nick, "You need a username and password") return end - local found, _, username, password = args:find("^([^%s]+)%s([^%s]+)$") + local found, _, playername, password = args:find("^([^%s]+)%s([^%s]+)$") if not found then - username = args + playername = args password = "" end - if minetest.auth_table[username] and - minetest.auth_table[username].password == minetest.get_password_hash(username, password) then - minetest.debug("User "..from.." from IRC logs in as "..username) - irc_users[from] = username - mt_irc.say(from, "You are now logged in as "..username) + if minetest.auth_table[playername] and + minetest.auth_table[playername].password == + minetest.get_password_hash(playername, password) then + minetest.log("action", "User "..user.nick + .." from IRC logs in as "..playername) + irc_users[user.nick] = playername + notify(user.nick, "You are now logged in as "..playername) else - minetest.debug("User "..from.." from IRC attempted log in as "..username.." unsuccessfully") - mt_irc.say(from, "Incorrect password or player does not exist") + minetest.log("action", user.nick.."@IRC attempted to log in as " + ..playername.." unsuccessfully") + notify(user.nick, "Incorrect password or player does not exist") end end}) -mt_irc.register_bot_command("logout", { +mt_irc:register_bot_command("logout", { description = "Logout", - func = function (from, args) - if irc_users[from] then - minetest.debug("User "..from.." from IRC logs out of "..irc_users[from]) - irc_users[from] = nil - mt_irc.say(from, "You are now logged off") + func = function (user, args) + if irc_users[user.nick] then + minetest.log("action", user.nick.."@IRC logs out from " + ..irc_users[user.nick]) + irc_users[user.nick] = nil + notify(user.nick, "You are now logged off") else - mt_irc.say(from, "You are not logged in") + notify(from, "You are not logged in") end end}) -mt_irc.register_bot_command("cmd", { +mt_irc:register_bot_command("cmd", { params = "", description = "Run a command on the server", - func = function (from, args) + func = function (user, args) if args == "" then - mt_irc.say(from, "You need a command") + notify(user.nick, "You need a command") return end - if not irc_users[from] then - mt_irc.say(from, "You are not loged in") + if not irc_users[user.nick] then + notify(user.nick, "You are not loged in") return end local found, _, commandname, params = args:find("^([^%s]+)%s(.+)$") @@ -79,31 +86,33 @@ mt_irc.register_bot_command("cmd", { end local command = minetest.chatcommands[commandname] if not command then - mt_irc.say(from, "Not a valid command") + notify(user.nick, "Not a valid command") return end - if minetest.check_player_privs(irc_users[from], command.privs) then - minetest.debug("User "..from.." from IRC runs "..args.." as "..irc_users[from]) - command.func(irc_users[from], (params or "")) - mt_irc.say(from, "Command run successfuly") + if minetest.check_player_privs(irc_users[user.nick], command.privs) then + minetest.log("action", user.nick.."@IRC runs " + ..args.." as "..irc_users[user.nick]) + command.func(irc_users[user.nick], (params or "")) end end}) -mt_irc.register_bot_command("say", { +mt_irc:register_bot_command("say", { params = "message", description = "Say something", - func = function (from, args) + func = function (user, args) if args == "" then - mt_irc.say(from, "You need a message") + notify(from, "You need a message") return end - if not irc_users[from] then - mt_irc.say(from, "You are not loged in") + if not irc_users[user.nick] then + notify(user.nick, "You are not loged in") return end - if minetest.check_player_privs(irc_users[from], {shout=true}) then - minetest.debug("User "..from.." from IRC says "..args.." as "..irc_users[from]) - minetest.chat_send_all("<"..irc_users[from].."@IRC> "..args) - mt_irc.say(from, "Message sent successfuly") + if minetest.check_player_privs(irc_users[user.nick], {shout=true}) then + minetest.log("action", user.nick.."@IRC says " + ..args.." as "..irc_users[user.nick]) + minetest.chat_send_all("<"..irc_users[user.nick].."@IRC> "..args) + notify(user.nick, "Message sent successfuly") end end}) +