irc/src/init.lua

128 lines
3.2 KiB
Lua
Raw Normal View History

2013-01-08 16:50:47 +01:00
2012-12-01 04:06:15 +01:00
-- IRC Mod for Minetest
2013-01-08 16:50:47 +01:00
-- By Diego Martínez <kaeza@users.sf.net>
2012-12-01 04:06:15 +01:00
--
-- This mod allows to tie a Minetest server to an IRC channel.
--
-- This program is free software. It comes without any warranty, to
-- the extent permitted by applicable law. You can redistribute it
-- and/or modify it under the terms of the Do What The Fuck You Want
-- To Public License, Version 2, as published by Sam Hocevar. See
-- http://sam.zoy.org/wtfpl/COPYING for more details.
--
2012-12-14 23:33:44 +01:00
local MODPATH = minetest.get_modpath("irc");
2012-12-01 04:06:15 +01:00
2012-12-14 23:33:44 +01:00
mt_irc = { };
2012-12-01 04:06:15 +01:00
2012-12-14 23:33:44 +01:00
dofile(MODPATH.."/config.lua");
2012-12-01 04:06:15 +01:00
2012-12-14 23:33:44 +01:00
mt_irc.cur_time = 0;
mt_irc.buffered_messages = { };
mt_irc.connected_players = { };
2012-12-22 04:16:28 +01:00
mt_irc.modpath = MODPATH;
2012-12-01 04:06:15 +01:00
package.path = MODPATH.."/?.lua;"..package.path;
package.cpath = MODPATH.."/lib?.so;"..MODPATH.."/?.dll;"..package.cpath;
local irc = require 'irc';
2012-12-14 23:33:44 +01:00
irc.DEBUG = ((mt_irc.debug and true) or false);
minetest.register_privilege("irc_admin", {
2013-04-25 23:00:44 +02:00
description = "Allow IRC administrative tasks to be performed.";
give_to_singleplayer = true;
});
2012-12-01 04:06:15 +01:00
2013-04-20 06:07:06 +02:00
minetest.register_globalstep(function(dtime)
2013-04-25 23:00:44 +02:00
if (not mt_irc.connect_ok) then return end
mt_irc.cur_time = mt_irc.cur_time + dtime
if (mt_irc.cur_time >= mt_irc.dtime) then
if (mt_irc.buffered_messages) then
for _, msg in ipairs(mt_irc.buffered_messages) do
local t = {
name=(msg.name or "<BUG:no one is saying this>"),
message=(msg.message or "<BUG:there is no message>")
}
local text = mt_irc.message_format_out:expandvars(t)
irc.say(mt_irc.channel, text)
end
mt_irc.buffered_messages = nil
end
irc.poll()
mt_irc.cur_time = mt_irc.cur_time - mt_irc.dtime
end
2013-04-20 06:07:06 +02:00
end)
2012-12-22 04:16:28 +01:00
mt_irc.part = function ( name )
2013-04-25 23:00:44 +02:00
if (not mt_irc.connected_players[name]) then
minetest.chat_send_player(name, "IRC: You are not in the channel.");
return;
end
mt_irc.connected_players[name] = nil;
minetest.chat_send_player(name, "IRC: You are now out of the channel.");
2012-12-22 04:16:28 +01:00
end
2012-12-22 04:16:28 +01:00
mt_irc.join = function ( name )
2013-04-25 23:00:44 +02:00
if (mt_irc.connected_players[name]) then
minetest.chat_send_player(name, "IRC: You are already in the channel.");
return;
end
mt_irc.connected_players[name] = true;
minetest.chat_send_player(name, "IRC: You are now in the channel.");
2012-12-22 04:16:28 +01:00
end
2012-12-22 04:16:28 +01:00
mt_irc.connect = function ( )
2013-04-25 23:00:44 +02:00
mt_irc.connect_ok = irc.connect({
network = mt_irc.server;
port = mt_irc.port;
nick = mt_irc.server_nick;
pass = mt_irc.password;
timeout = mt_irc.timeout;
channel = mt_irc.channel;
});
if (not mt_irc.connect_ok) then
local s = "DEBUG: irc.connect failed";
minetest.debug(s);
minetest.chat_send_all(s);
return;
end
while (not mt_irc.got_motd) do
irc.poll();
end
end
2012-12-22 04:16:28 +01:00
2012-12-28 12:41:10 +01:00
mt_irc.say = function ( to, msg )
2013-04-25 23:00:44 +02:00
if (not msg) then
msg = to;
to = mt_irc.channel;
end
to = to or mt_irc.channel;
msg = msg or "";
local msg2 = mt_irc._callback("msg_out", true, to, msg);
if ((type(msg2) == "boolean") and (not msg2)) then
return;
elseif (msg2 ~= nil) then
msg = tostring(msg);
end
irc.say(to, msg);
2012-12-28 12:41:10 +01:00
end
2013-01-08 16:50:47 +01:00
mt_irc.irc = irc;
-- Misc helpers
-- Requested by Exio
string.expandvars = function ( s, vars )
2013-04-25 23:00:44 +02:00
return s:gsub("%$%(([^)]+)%)", vars);
end
2012-12-22 04:16:28 +01:00
dofile(MODPATH.."/callback.lua");
dofile(MODPATH.."/chatcmds.lua");
dofile(MODPATH.."/botcmds.lua");
2012-12-22 04:16:28 +01:00
dofile(MODPATH.."/friends.lua");
if (mt_irc.auto_connect) then
2013-04-25 23:00:44 +02:00
mt_irc.connect()
2012-12-22 04:16:28 +01:00
end