From 22e523cc7ab4fcdfd44d20e207a3b45262da0e4f Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 28 May 2014 20:29:32 -0400 Subject: [PATCH] Update to latest API version --- init.lua | 108 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/init.lua b/init.lua index abb54a9..647b1a4 100644 --- a/init.lua +++ b/init.lua @@ -1,17 +1,17 @@ -irc_users = {} +local irc_users = {} local old_chat_send_player = minetest.chat_send_player minetest.chat_send_player = function(name, message) for nick, loggedInAs in pairs(irc_users) do if name == loggedInAs and not minetest.get_player_by_name(name) then - mt_irc:say(nick, message) + irc:say(nick, message) end end return old_chat_send_player(name, message) end -mt_irc:register_hook("NickChange", function(user, newNick) +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] @@ -20,62 +20,78 @@ mt_irc:register_hook("NickChange", function(user, newNick) end end) -mt_irc:register_hook("OnQuit", function(user, reason) +irc:register_hook("OnPart", function(user, channel, reason) irc_users[user.nick] = nil end) -mt_irc:register_bot_command("login", { +irc:register_hook("OnKick", function(user, channel, target, reason) + irc_users[target] = nil +end) + +irc:register_hook("OnQuit", function(user, reason) + irc_users[user.nick] = nil +end) + +irc:register_bot_command("login", { params = " ", description = "Login as a user to run commands", func = function(user, args) if args == "" then - mt_irc:reply("You need a username and password") - return + return false, "You need a username and password." end - local found, _, playername, password = args:find("^([^%s]+)%s([^%s]+)$") - if not found then - playername = args - password = "" + local playerName, password = args:match("^(%S+)%s(%S+)$") + if not playerName then + return false, "Player name and password required." end - if minetest.auth_table[playername] and - minetest.auth_table[playername].password == - minetest.get_password_hash(playername, password) then + local inChannel = false + local users = irc.conn.channels[irc.config.channel].users + for cnick, cuser in pairs(users) do + if user.nick == cnick then + inChannel = true + break + end + end + if not inChannel then + return false, "You need to be in the server's channel to login." + end + 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 - mt_irc:reply("You are now logged in as "..playername) + .." from IRC logs in as "..playerName) + irc_users[user.nick] = playerName + return true, "You are now logged in as "..playerName else minetest.log("action", user.nick.."@IRC attempted to log in as " - ..playername.." unsuccessfully") - mt_irc:reply("Incorrect password or player does not exist") + ..playerName.." unsuccessfully") + return false, "Incorrect password or player does not exist." end -end}) + end +}) -mt_irc:register_bot_command("logout", { +irc:register_bot_command("logout", { description = "Logout", 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 - mt_irc:reply("You are now logged off") + return true, "You are now logged off." else - mt_irc:reply("You are not logged in") + return false, "You are not logged in." end end, }) -mt_irc:register_bot_command("cmd", { +irc:register_bot_command("cmd", { params = "", description = "Run a command on the server", func = function (user, args) if args == "" then - mt_irc:reply("You need a command") - return + return false, "You need a command." end if not irc_users[user.nick] then - mt_irc:reply("You are not logged in") - return + return false, "You are not logged in." end local found, _, commandname, params = args:find("^([^%s]+)%s(.+)$") if not found then @@ -83,35 +99,37 @@ mt_irc:register_bot_command("cmd", { end local command = minetest.chatcommands[commandname] if not command then - mt_irc:reply("Not a valid command") - return + return false, "Not a valid command." end if not minetest.check_player_privs(irc_users[user.nick], command.privs) then - mt_irc:reply("Your privileges are insufficient") - return + return false, "Your privileges are insufficient." end minetest.log("action", user.nick.."@IRC runs " ..args.." as "..irc_users[user.nick]) - command.func(irc_users[user.nick], (params or "")) -end}) + return command.func(irc_users[user.nick], (params or "")) + end +}) -mt_irc:register_bot_command("say", { +irc:register_bot_command("say", { params = "message", description = "Say something", func = function (user, args) if args == "" then - mt_irc:reply("You need a message") - return + return false, "You need a message." end if not irc_users[user.nick] then - mt_irc:reply("You are not logged in") - return + return false, "You are not logged in." end - 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) - mt_irc:reply("Message sent successfuly") + if not minetest.check_player_privs(irc_users[user.nick], {shout=true}) then + minetest.log("action", ("%s@IRC tried to say %q as %s" + .." without the shout privilege.") + :format(user.nick, args, irc_users[user.nick])) + return false, "You can not shout." end -end}) + minetest.log("action", ("%s@IRC says %q as %s.") + :format(user.nick, args, irc_users[user.nick])) + minetest.chat_send_all("<"..irc_users[user.nick].."@IRC> "..args) + return true, "Message sent successfuly." + end +})