Change spaces to tabs

This commit is contained in:
ShadowNinja 2013-04-25 17:00:44 -04:00
parent 63c2b52c41
commit 3aede000b7
7 changed files with 998 additions and 999 deletions

View File

@ -10,63 +10,63 @@ set(MINETEST_IRC_VERSION 0.1.0)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(LUA_SRCS set(LUA_SRCS
src/lua/lapi.c src/lua/lapi.c
src/lua/lcode.c src/lua/lcode.c
src/lua/ldebug.c src/lua/ldebug.c
src/lua/ldo.c src/lua/ldo.c
src/lua/ldump.c src/lua/ldump.c
src/lua/lfunc.c src/lua/lfunc.c
src/lua/lgc.c src/lua/lgc.c
src/lua/llex.c src/lua/llex.c
src/lua/lmem.c src/lua/lmem.c
src/lua/lobject.c src/lua/lobject.c
src/lua/lopcodes.c src/lua/lopcodes.c
src/lua/lparser.c src/lua/lparser.c
src/lua/lstate.c src/lua/lstate.c
src/lua/lstring.c src/lua/lstring.c
src/lua/ltable.c src/lua/ltable.c
src/lua/ltm.c src/lua/ltm.c
src/lua/lundump.c src/lua/lundump.c
src/lua/lvm.c src/lua/lvm.c
src/lua/lzio.c src/lua/lzio.c
src/lua/lauxlib.c src/lua/lauxlib.c
src/lua/lbaselib.c src/lua/lbaselib.c
src/lua/ldblib.c src/lua/ldblib.c
src/lua/liolib.c src/lua/liolib.c
src/lua/lmathlib.c src/lua/lmathlib.c
src/lua/loslib.c src/lua/loslib.c
src/lua/ltablib.c src/lua/ltablib.c
src/lua/lstrlib.c src/lua/lstrlib.c
src/lua/loadlib.c src/lua/loadlib.c
src/lua/linit.c src/lua/linit.c
) )
set(LUASOCKET_SRCS set(LUASOCKET_SRCS
src/luasocket/compat51.c src/luasocket/compat51.c
src/luasocket/luasocket.c src/luasocket/luasocket.c
src/luasocket/timeout.c src/luasocket/timeout.c
src/luasocket/buffer.c src/luasocket/buffer.c
src/luasocket/io.c src/luasocket/io.c
src/luasocket/auxiliar.c src/luasocket/auxiliar.c
src/luasocket/options.c src/luasocket/options.c
src/luasocket/inet.c src/luasocket/inet.c
src/luasocket/tcp.c src/luasocket/tcp.c
src/luasocket/udp.c src/luasocket/udp.c
src/luasocket/except.c src/luasocket/except.c
src/luasocket/select.c src/luasocket/select.c
src/luasocket/buffer.c src/luasocket/buffer.c
src/luasocket/auxiliar.c src/luasocket/auxiliar.c
src/luasocket/options.c src/luasocket/options.c
src/luasocket/timeout.c src/luasocket/timeout.c
src/luasocket/io.c src/luasocket/io.c
src/luasocket/mime.c src/luasocket/mime.c
) )
if(WIN32) if(WIN32)
list(APPEND LUASOCKET_SRCS src/luasocket/wsocket.c) list(APPEND LUASOCKET_SRCS src/luasocket/wsocket.c)
set(LUASOCKET_EXTRA_LIBS -lwininet) set(LUASOCKET_EXTRA_LIBS -lwininet)
else() else()
list(APPEND LUASOCKET_SRCS src/luasocket/usocket.c src/luasocket/unix.c) list(APPEND LUASOCKET_SRCS src/luasocket/usocket.c src/luasocket/unix.c)
endif() endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
@ -76,68 +76,68 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/luasocket)
add_library(luasocket_lib MODULE ${LUASOCKET_SRCS} ${LUA_SRCS}) add_library(luasocket_lib MODULE ${LUASOCKET_SRCS} ${LUA_SRCS})
set_target_properties(luasocket_lib PROPERTIES set_target_properties(luasocket_lib PROPERTIES
OUTPUT_NAME luasocket) OUTPUT_NAME luasocket)
if(WIN32) if(WIN32)
# When using MinGW32, CMake prefixes DLLs with "lib". Force remove # When using MinGW32, CMake prefixes DLLs with "lib". Force remove
# this prefix regardless of compiler. # this prefix regardless of compiler.
set_target_properties(luasocket_lib PROPERTIES set_target_properties(luasocket_lib PROPERTIES
PREFIX "") PREFIX "")
if (NOT MSVC) # GCC? if (NOT MSVC) # GCC?
# The `-fPIC' flag generates a warning on MinGW32, which combined # The `-fPIC' flag generates a warning on MinGW32, which combined
# with `-Werror' makes that an error though `-fPIC' is ignored. # with `-Werror' makes that an error though `-fPIC' is ignored.
# We use `-fno-PIC' to avoid that. # We use `-fno-PIC' to avoid that.
set_target_properties(luasocket_lib PROPERTIES set_target_properties(luasocket_lib PROPERTIES
COMPILE_FLAGS "-fno-PIC -Wall -Werror") COMPILE_FLAGS "-fno-PIC -Wall -Werror")
endif() endif()
find_library(ws2_32_lib NAMES ws2_32) find_library(ws2_32_lib NAMES ws2_32)
target_link_libraries(luasocket_lib ${ws2_32_lib}) target_link_libraries(luasocket_lib ${ws2_32_lib})
else() # Possibly Unix else() # Possibly Unix
set_target_properties(luasocket_lib PROPERTIES set_target_properties(luasocket_lib PROPERTIES
COMPILE_FLAGS "-Wall -Werror") COMPILE_FLAGS "-Wall -Werror")
endif() endif()
set(dir ${CMAKE_CURRENT_BINARY_DIR}/irc/) set(dir ${CMAKE_CURRENT_BINARY_DIR}/irc/)
if(WIN32) if(WIN32)
set(lib "${CMAKE_CURRENT_BINARY_DIR}/luasocket.dll") set(lib "${CMAKE_CURRENT_BINARY_DIR}/luasocket.dll")
else() else()
set(lib "${CMAKE_CURRENT_BINARY_DIR}/libluasocket.so") set(lib "${CMAKE_CURRENT_BINARY_DIR}/libluasocket.so")
endif() endif()
add_custom_target(pack_mod add_custom_target(pack_mod
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
# LuaIRC # LuaIRC
COMMAND ${CMAKE_COMMAND} -E make_directory ${dir} COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luairc/irc.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luairc/irc.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy_directory src/luairc/irc ${dir}/irc COMMAND ${CMAKE_COMMAND} -E copy_directory src/luairc/irc ${dir}/irc
COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE-LuaIRC.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE-LuaIRC.txt ${dir}
# luasocket # luasocket
COMMAND ${CMAKE_COMMAND} -E make_directory ${dir} COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/ftp.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/ftp.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/http.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/http.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/ltn12.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/ltn12.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/mime.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/mime.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/smtp.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/smtp.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/socket.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/socket.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/tp.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/tp.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/url.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/luasocket/url.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE-luasocket.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE-luasocket.txt ${dir}
COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${dir} COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${dir}
# IRC mod # IRC mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${dir} COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/init.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/init.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/config.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/config.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/callback.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/callback.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/friends.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/friends.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/chatcmds.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/chatcmds.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy src/botcmds.lua ${dir} COMMAND ${CMAKE_COMMAND} -E copy src/botcmds.lua ${dir}
COMMAND ${CMAKE_COMMAND} -E copy README.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy README.txt ${dir}
COMMAND ${CMAKE_COMMAND} -E copy doc/API.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/API.txt ${dir}
COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/LICENSE.txt ${dir}
COMMAND ${CMAKE_COMMAND} -E copy doc/CHANGES.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/CHANGES.txt ${dir}
COMMAND ${CMAKE_COMMAND} -E copy doc/TODO.txt ${dir} COMMAND ${CMAKE_COMMAND} -E copy doc/TODO.txt ${dir}
) )

View File

@ -2,91 +2,90 @@
mt_irc.bot_commands = { }; mt_irc.bot_commands = { };
mt_irc.bot_help = function ( from, cmdname ) mt_irc.bot_help = function ( from, cmdname )
local cmd = mt_irc.bot_commands[cmdname]; local cmd = mt_irc.bot_commands[cmdname];
if (not cmd) then if (not cmd) then
irc.say(from, "Unknown command `"..cmdname.."'"); irc.say(from, "Unknown command `"..cmdname.."'");
return; return;
end end
local usage = "Usage: !"..cmdname; local usage = "Usage: !"..cmdname;
if (cmd.params) then usage = usage.." "..cmd.params; end if (cmd.params) then usage = usage.." "..cmd.params; end
irc.say(from, usage); irc.say(from, usage);
if (cmd.description) then irc.say(from, " "..cmd.description); end if (cmd.description) then irc.say(from, " "..cmd.description); end
end end
mt_irc.register_bot_command = function ( name, def ) mt_irc.register_bot_command = function ( name, def )
if ((not def.func) or (type(def.func) ~= "function")) then if ((not def.func) or (type(def.func) ~= "function")) then
error("Wrong bot command definition", 2); error("Wrong bot command definition", 2);
end end
mt_irc.bot_commands[name] = def; mt_irc.bot_commands[name] = def;
end end
mt_irc.register_bot_command("help", { mt_irc.register_bot_command("help", {
params = "[<command>]"; params = "[<command>]";
description = "Get help about a command"; description = "Get help about a command";
func = function ( from, args ) func = function ( from, args )
if (args ~= "") then if (args ~= "") then
mt_irc.bot_help(from, args); mt_irc.bot_help(from, args);
else else
local cmdlist = "Available commands:"; local cmdlist = "Available commands:";
for name,cmd in pairs(mt_irc.bot_commands) do for name,cmd in pairs(mt_irc.bot_commands) do
cmdlist = cmdlist.." "..name; cmdlist = cmdlist.." "..name;
end end
irc.say(from, cmdlist); irc.say(from, cmdlist);
irc.say(from, "Use `!help <command name>' to get help about a specific command."); irc.say(from, "Use `!help <command name>' to get help about a specific command.");
end end
end; end;
}); });
mt_irc.register_bot_command("who", { mt_irc.register_bot_command("who", {
params = nil; params = nil;
description = "Tell who is playing"; description = "Tell who is playing";
func = function ( from, args ) func = function ( from, args )
local s = ""; local s = "";
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then if (v) then
s = s.." "..k; s = s.." "..k;
end end
end end
irc.say(from, "Players On Channel:"..s); irc.say(from, "Players On Channel:"..s);
end; end;
}); });
mt_irc.register_bot_command("whereis", { mt_irc.register_bot_command("whereis", {
params = "<player>"; params = "<player>";
description = "Tell the location of <player>"; description = "Tell the location of <player>";
func = function ( from, args )
func = function ( from, args ) if (args == "") then
if (args == "") then mt_irc.bot_help(from, "whereis");
mt_irc.bot_help(from, "whereis"); return;
return; end
end local list = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 100000);
local list = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 100000); for _, obj in ipairs(list) do
for _, obj in ipairs(list) do if (obj:is_player() and (obj:get_player_name() == args)) then
if (obj:is_player() and (obj:get_player_name() == args)) then local fmt = "Player %s is at (%.2f,%.2f,%.2f)";
local fmt = "Player %s is at (%.2f,%.2f,%.2f)"; local pos = obj:getpos();
local pos = obj:getpos(); irc.say(from, fmt:format(args, pos.x, pos.y, pos.z));
irc.say(from, fmt:format(args, pos.x, pos.y, pos.z)); return;
return; end
end end
end irc.say(from, "There's No player named `"..args.."'");
irc.say(from, "There's No player named `"..args.."'"); end;
end;
}); });
local starttime = os.time(); local starttime = os.time();
mt_irc.register_bot_command("uptime", { mt_irc.register_bot_command("uptime", {
params = ""; params = "";
description = "Tell how much time the server has been up"; description = "Tell how much time the server has been up";
privs = { shout=true; }; privs = { shout=true; };
func = function ( name, param ) func = function ( name, param )
local t = os.time(); local t = os.time();
local diff = os.difftime(t, starttime); local diff = os.difftime(t, starttime);
local fmt = "Server has been running for %d:%02d:%02d"; local fmt = "Server has been running for %d:%02d:%02d";
irc.say(name, fmt:format( irc.say(name, fmt:format(
math.floor(diff / 60 / 60), math.floor(diff / 60 / 60),
math.mod(math.floor(diff / 60), 60), math.mod(math.floor(diff / 60), 60),
math.mod(math.floor(diff), 60) math.mod(math.floor(diff), 60)
)); ));
end; end;
}); });

View File

@ -15,209 +15,209 @@ local irc = require("irc");
mt_irc.callbacks = { }; mt_irc.callbacks = { };
mt_irc._callback = function ( name, breakonreturn, ... ) mt_irc._callback = function ( name, breakonreturn, ... )
local list = mt_irc.callbacks[name]; local list = mt_irc.callbacks[name];
if (not list) then return; end if (not list) then return; end
for n = 1, #list do for n = 1, #list do
local r = list[n](...); local r = list[n](...);
if (breakonreturn and (r ~= nil)) then return r; end if (breakonreturn and (r ~= nil)) then return r; end
end end
end end
mt_irc.register_callback = function ( name, func ) mt_irc.register_callback = function ( name, func )
local list = mt_irc.callbacks[name]; local list = mt_irc.callbacks[name];
if (not list) then if (not list) then
list = { }; list = { };
mt_irc.callbacks[name] = list; mt_irc.callbacks[name] = list;
end end
list[#list + 1] = func; list[#list + 1] = func;
end end
minetest.register_on_joinplayer(function ( player ) minetest.register_on_joinplayer(function ( player )
local name = player:get_player_name(); local name = player:get_player_name();
mt_irc.connected_players[name] = mt_irc.auto_join; mt_irc.connected_players[name] = mt_irc.auto_join;
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
mt_irc.say("*** "..name.." joined the game"); mt_irc.say("*** "..name.." joined the game");
end); end);
minetest.register_on_leaveplayer(function ( player ) minetest.register_on_leaveplayer(function ( player )
local name = player:get_player_name(); local name = player:get_player_name();
mt_irc.connected_players[name] = nil; mt_irc.connected_players[name] = nil;
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
mt_irc.say("*** "..name.." left the game"); mt_irc.say("*** "..name.." left the game");
end); end);
irc.register_callback("connect", function ( ) irc.register_callback("connect", function ( )
mt_irc.got_motd = true; mt_irc.got_motd = true;
irc.join(mt_irc.channel); irc.join(mt_irc.channel);
end); end);
irc.register_callback("channel_msg", function ( channel, from, message ) irc.register_callback("channel_msg", function ( channel, from, message )
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
local t = { local t = {
name=(from or "<BUG:no one is saying this>"); name=(from or "<BUG:no one is saying this>");
message=(message or "<BUG:there is no message>"); message=(message or "<BUG:there is no message>");
server=mt_irc.server; server=mt_irc.server;
port=mt_irc.port; port=mt_irc.port;
channel=mt_irc.channel; channel=mt_irc.channel;
}; };
local text = mt_irc.message_format_in:gsub("%$%(([^)]+)%)", t) local text = mt_irc.message_format_in:gsub("%$%(([^)]+)%)", t)
if (mt_irc._callback("channel_msg", from, message, text)) then return; end if (mt_irc._callback("channel_msg", from, message, text)) then return; end
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, text); end if (v) then minetest.chat_send_player(k, text); end
end end
end); end);
local function bot_command ( from, message ) local function bot_command ( from, message )
local pos = message:find(" ", 1, true); local pos = message:find(" ", 1, true);
local cmd, args; local cmd, args;
if (pos) then if (pos) then
cmd = message:sub(1, pos - 1); cmd = message:sub(1, pos - 1);
args = message:sub(pos + 1); args = message:sub(pos + 1);
else else
cmd = message; cmd = message;
args = ""; args = "";
end end
if (not mt_irc.bot_commands[cmd]) then if (not mt_irc.bot_commands[cmd]) then
mt_irc.say(from, "Unknown command `"..cmd.."'. Try `!help'."); mt_irc.say(from, "Unknown command `"..cmd.."'. Try `!help'.");
return; return;
end end
mt_irc.bot_commands[cmd].func(from, args); mt_irc.bot_commands[cmd].func(from, args);
end end
irc.register_callback("private_msg", function ( from, message ) irc.register_callback("private_msg", function ( from, message )
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
local player_to; local player_to;
local msg; local msg;
if (message:sub(1, 1) == "@") then if (message:sub(1, 1) == "@") then
local pos = message:find(" ", 1, true); local pos = message:find(" ", 1, true);
if (not pos) then return; end if (not pos) then return; end
player_to = message:sub(2, pos - 1); player_to = message:sub(2, pos - 1);
msg = message:sub(pos + 1); msg = message:sub(pos + 1);
elseif (message:sub(1, 1) == "!") then elseif (message:sub(1, 1) == "!") then
bot_command(from, message:sub(2)); bot_command(from, message:sub(2));
return; return;
else else
irc.say(from, 'Message not sent! Please use "!help" to see possible commands.'); irc.say(from, 'Message not sent! Please use "!help" to see possible commands.');
irc.say(from, ' Or use the "@playername Message" syntax to send a private message.'); irc.say(from, ' Or use the "@playername Message" syntax to send a private message.');
return; return;
end end
if (not mt_irc.connected_players[player_to]) then if (not mt_irc.connected_players[player_to]) then
irc.say(from, "User `"..player_to.."' is not connected to IRC."); irc.say(from, "User `"..player_to.."' is not connected to IRC.");
return; return;
end end
local t = { local t = {
name=(from or "<BUG:no one is saying this>"); name=(from or "<BUG:no one is saying this>");
message=(msg or "<BUG:there is no message>"); message=(msg or "<BUG:there is no message>");
server=mt_irc.server; server=mt_irc.server;
port=mt_irc.port; port=mt_irc.port;
channel=mt_irc.channel; channel=mt_irc.channel;
}; };
local text = mt_irc.message_format_in:expandvars(t); local text = mt_irc.message_format_in:expandvars(t);
if (mt_irc._callback("private_msg", from, player_to, message, text)) then return; end if (mt_irc._callback("private_msg", from, player_to, message, text)) then return; end
minetest.chat_send_player(player_to, "PRIVATE: "..text); minetest.chat_send_player(player_to, "PRIVATE: "..text);
mt_irc.say(from, "Message sent!") mt_irc.say(from, "Message sent!")
end); end);
irc.register_callback("kick", function(chaninfo, nick, kicker) irc.register_callback("kick", function(chaninfo, nick, kicker)
if nick == mt_irc.server_nick then if nick == mt_irc.server_nick then
minetest.chat_send_all("IRC: Bot was kicked by "..kicker.."."); minetest.chat_send_all("IRC: Bot was kicked by "..kicker..".");
mt_irc.got_motd = false; mt_irc.got_motd = false;
mt_irc.connect_ok = false; mt_irc.connect_ok = false;
irc.quit("Kicked"); irc.quit("Kicked");
end end
end); end);
irc.register_callback("nick_change", function ( from, old_nick ) irc.register_callback("nick_change", function ( from, old_nick )
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
mt_irc._callback("nick_change", false, old_nick, from); mt_irc._callback("nick_change", false, old_nick, from);
local text = "["..old_nick.." changed his nick to "..from.."]"; local text = "["..old_nick.." changed his nick to "..from.."]";
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, text); end if (v) then minetest.chat_send_player(k, text); end
end end
end); end);
irc.register_callback("join", function ( servinfo, from ) irc.register_callback("join", function ( servinfo, from )
local text = "*** "..from.." joined "..mt_irc.channel; local text = "*** "..from.." joined "..mt_irc.channel;
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, text); end if (v) then minetest.chat_send_player(k, text); end
end end
end); end);
irc.register_callback("part", function ( servinfo, from, part_msg ) irc.register_callback("part", function ( servinfo, from, part_msg )
mt_irc._callback("part", false, from, part_msg); mt_irc._callback("part", false, from, part_msg);
local text local text
if part_msg then if part_msg then
text = "*** "..from.." left "..mt_irc.channel.." ("..part_msg..")"; text = "*** "..from.." left "..mt_irc.channel.." ("..part_msg..")";
else else
text = "*** "..from.." left "..mt_irc.channel; text = "*** "..from.." left "..mt_irc.channel;
end end
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, text); end if (v) then minetest.chat_send_player(k, text); end
end end
end); end);
irc.register_callback("channel_act", function ( servinfo, from, message) irc.register_callback("channel_act", function ( servinfo, from, message)
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
local text = "*** "..from.." "..message; local text = "*** "..from.." "..message;
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, text); end if (v) then minetest.chat_send_player(k, text); end
end end
end); end);
minetest.register_on_chat_message(function ( name, message ) minetest.register_on_chat_message(function ( name, message )
if (not mt_irc.connect_ok) then return; end if (not mt_irc.connect_ok) then return; end
if (message:sub(1, 1) == "/") then return; end if (message:sub(1, 1) == "/") then return; end
if (not mt_irc.connected_players[name]) then return; end if (not mt_irc.connected_players[name]) then return; end
if (not minetest.check_player_privs(name, {shout=true})) then if (not minetest.check_player_privs(name, {shout=true})) then
return; return;
end end
if (not mt_irc.buffered_messages) then if (not mt_irc.buffered_messages) then
mt_irc.buffered_messages = { }; mt_irc.buffered_messages = { };
end end
mt_irc.buffered_messages[#mt_irc.buffered_messages + 1] = { mt_irc.buffered_messages[#mt_irc.buffered_messages + 1] = {
name = name; name = name;
message = message; message = message;
}; };
end); end);
minetest.register_on_shutdown(function ( ) minetest.register_on_shutdown(function ( )
irc.quit("Game shutting down."); irc.quit("Game shutting down.");
for n = 1, 5 do for n = 1, 5 do
irc.poll(); irc.poll();
end end
end); end);
irc.handlers.on_error = function (...) --( from, respond_to ) irc.handlers.on_error = function (...) --( from, respond_to )
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then minetest.chat_send_player(k, "IRC: Bot had a network error. Reconnecting in 5 seconds..."); end if (v) then minetest.chat_send_player(k, "IRC: Bot had a network error. Reconnecting in 5 seconds..."); end
end end
for _, v in ipairs({...}) do for _, v in ipairs({...}) do
minetest.chat_send_all(dump(v)); minetest.chat_send_all(dump(v));
end end
irc.quit("Network error"); irc.quit("Network error");
for n = 1, 5 do for n = 1, 5 do
irc.poll(); irc.poll();
end end
mt_irc.got_motd = false; mt_irc.got_motd = false;
mt_irc.connect_ok = false; mt_irc.connect_ok = false;
minetest.after(5, mt_irc.connect); minetest.after(5, mt_irc.connect);
end end
irc.handlers.on_err_nicknameinuse = function ( from, respond_to ) irc.handlers.on_err_nicknameinuse = function ( from, respond_to )
irc.quit("Nick in use"); irc.quit("Nick in use");
for n = 1, 5 do for n = 1, 5 do
irc.poll(); irc.poll();
end end
mt_irc.got_motd = false; mt_irc.got_motd = false;
mt_irc.connect_ok = false; mt_irc.connect_ok = false;
local n = (tonumber(mt_irc.server_nick:sub(-1)) or 0) + 1; local n = (tonumber(mt_irc.server_nick:sub(-1)) or 0) + 1;
if (n == 10) then n = 1; end if (n == 10) then n = 1; end
mt_irc.server_nick = mt_irc.server_nick:sub(1, -2)..n; mt_irc.server_nick = mt_irc.server_nick:sub(1, -2)..n;
mt_irc.connect(); mt_irc.connect();
end end
-- TESTING -- TESTING

View File

@ -14,87 +14,87 @@
local irc = require("irc"); local irc = require("irc");
minetest.register_chatcommand("irc_msg", { minetest.register_chatcommand("irc_msg", {
params = "<name> <message>"; params = "<name> <message>";
description = "Send a private message to an IRC user"; description = "Send a private message to an IRC user";
privs = { shout=true; }; privs = { shout=true; };
func = function ( name, param ) func = function ( name, param )
if (not mt_irc.connect_ok) then if (not mt_irc.connect_ok) then
minetest.chat_send_player(name, "IRC: You are not connected, use /irc_connect."); minetest.chat_send_player(name, "IRC: You are not connected, use /irc_connect.");
return; return;
end end
local found, _, toname, msg = param:find("^([^%s#]+)%s(.+)"); local found, _, toname, msg = param:find("^([^%s#]+)%s(.+)");
if not found then if not found then
minetest.chat_send_player(name, "Invalid usage, see /help irc_msg."); minetest.chat_send_player(name, "Invalid usage, see /help irc_msg.");
return; return;
end end
local t = {name=name, message=msg}; local t = {name=name, message=msg};
local text = mt_irc.message_format_out:expandvars(t); local text = mt_irc.message_format_out:expandvars(t);
mt_irc.say(toname, text); mt_irc.say(toname, text);
minetest.chat_send_player(name, "Message sent!") minetest.chat_send_player(name, "Message sent!")
end; end;
}); });
minetest.register_chatcommand("irc_connect", { minetest.register_chatcommand("irc_connect", {
params = ""; params = "";
description = "Connect to the IRC server"; description = "Connect to the IRC server";
privs = { irc_admin=true; }; privs = { irc_admin=true; };
func = function ( name, param ) func = function ( name, param )
if (mt_irc.connect_ok) then if (mt_irc.connect_ok) then
minetest.chat_send_player(name, "IRC: You are already connected."); minetest.chat_send_player(name, "IRC: You are already connected.");
return; return;
end end
mt_irc.connect(); mt_irc.connect();
minetest.chat_send_player(name, "IRC: You are now connected."); minetest.chat_send_player(name, "IRC: You are now connected.");
irc.say(mt_irc.channel, name.." joined the channel."); irc.say(mt_irc.channel, name.." joined the channel.");
end; end;
}); });
minetest.register_chatcommand("irc_disconnect", { minetest.register_chatcommand("irc_disconnect", {
params = ""; params = "";
description = "Disconnect from the IRC server"; description = "Disconnect from the IRC server";
privs = { irc_admin=true; }; privs = { irc_admin=true; };
func = function ( name, param ) func = function ( name, param )
if (not mt_irc.connect_ok) then if (not mt_irc.connect_ok) then
minetest.chat_send_player(name, "IRC: You are not connected."); minetest.chat_send_player(name, "IRC: You are not connected.");
return; return;
end end
irc.quit("Manual BOT Disconnection"); irc.quit("Manual BOT Disconnection");
minetest.chat_send_player(name, "IRC: You are now disconnected."); minetest.chat_send_player(name, "IRC: You are now disconnected.");
mt_irc.connect_ok = false; mt_irc.connect_ok = false;
end; end;
}); });
minetest.register_chatcommand("irc_reconnect", { minetest.register_chatcommand("irc_reconnect", {
params = ""; params = "";
description = "Reconnect to the IRC server"; description = "Reconnect to the IRC server";
privs = { irc_admin=true; }; privs = { irc_admin=true; };
func = function ( name, param ) func = function ( name, param )
if (mt_irc.connect_ok) then if (mt_irc.connect_ok) then
irc.quit("Reconnecting BOT..."); irc.quit("Reconnecting BOT...");
minetest.chat_send_player(name, "IRC: Reconnecting bot..."); minetest.chat_send_player(name, "IRC: Reconnecting bot...");
mt_irc.got_motd = true; mt_irc.got_motd = true;
mt_irc.connect_ok = false; mt_irc.connect_ok = false;
end end
mt_irc.connect(); mt_irc.connect();
end; end;
}); });
minetest.register_chatcommand("join", { minetest.register_chatcommand("join", {
params = ""; params = "";
description = "Join the IRC channel"; description = "Join the IRC channel";
privs = { shout=true; }; privs = { shout=true; };
func = function ( name, param ) func = function ( name, param )
mt_irc.join(name); mt_irc.join(name);
end; end;
}); });
minetest.register_chatcommand("part", { minetest.register_chatcommand("part", {
params = ""; params = "";
description = "Part the IRC channel"; description = "Part the IRC channel";
privs = { shout=true; }; privs = { shout=true; };
func = function ( name, param ) func = function ( name, param )
mt_irc.part(name); mt_irc.part(name);
end; end;
}); });
minetest.register_chatcommand("me", { minetest.register_chatcommand("me", {
@ -102,23 +102,23 @@ minetest.register_chatcommand("me", {
description = "chat action (eg. /me orders a pizza)"; description = "chat action (eg. /me orders a pizza)";
privs = { shout=true }; privs = { shout=true };
func = function(name, param) func = function(name, param)
minetest.chat_send_all("* "..name.." "..param); minetest.chat_send_all("* "..name.." "..param);
irc.say(mt_irc.channel, "* "..name.." "..param); irc.say(mt_irc.channel, "* "..name.." "..param);
end, end,
}) })
minetest.register_chatcommand("who", { minetest.register_chatcommand("who", {
-- TODO: This duplicates code from !who -- TODO: This duplicates code from !who
params = ""; params = "";
description = "Tell who is currently on the channel"; description = "Tell who is currently on the channel";
privs = { shout=true; }; privs = { shout=true; };
func = function ( name, param ) func = function ( name, param )
local s = ""; local s = "";
for k, v in pairs(mt_irc.connected_players) do for k, v in pairs(mt_irc.connected_players) do
if (v) then if (v) then
s = s.." "..k; s = s.." "..k;
end end
end end
minetest.chat_send_player(name, "Players On Channel:"..s); minetest.chat_send_player(name, "Players On Channel:"..s);
end; end;
}); });

View File

@ -61,12 +61,12 @@ mt_irc.auto_connect = not minetest.setting_getbool("mt_irc.disable_auto_connect"
-- Set default server nick if not specified. -- Set default server nick if not specified.
if (not mt_irc.server_nick) then if (not mt_irc.server_nick) then
local pr = PseudoRandom(os.time()); local pr = PseudoRandom(os.time());
-- Workaround for bad distribution in minetest PRNG implementation. -- Workaround for bad distribution in minetest PRNG implementation.
local fmt = "minetest-%02X%02X%02X"; local fmt = "minetest-%02X%02X%02X";
mt_irc.server_nick = fmt:format( mt_irc.server_nick = fmt:format(
pr:next(0, 255), pr:next(0, 255),
pr:next(0, 255), pr:next(0, 255),
pr:next(0, 255) pr:next(0, 255)
); );
end end

View File

@ -30,82 +30,82 @@ local irc = require 'irc';
irc.DEBUG = ((mt_irc.debug and true) or false); irc.DEBUG = ((mt_irc.debug and true) or false);
minetest.register_privilege("irc_admin", { minetest.register_privilege("irc_admin", {
description = "Allow IRC administrative tasks to be performed."; description = "Allow IRC administrative tasks to be performed.";
give_to_singleplayer = true; give_to_singleplayer = true;
}); });
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
if (not mt_irc.connect_ok) then return end if (not mt_irc.connect_ok) then return end
mt_irc.cur_time = mt_irc.cur_time + dtime mt_irc.cur_time = mt_irc.cur_time + dtime
if (mt_irc.cur_time >= mt_irc.dtime) then if (mt_irc.cur_time >= mt_irc.dtime) then
if (mt_irc.buffered_messages) then if (mt_irc.buffered_messages) then
for _, msg in ipairs(mt_irc.buffered_messages) do for _, msg in ipairs(mt_irc.buffered_messages) do
local t = { local t = {
name=(msg.name or "<BUG:no one is saying this>"), name=(msg.name or "<BUG:no one is saying this>"),
message=(msg.message or "<BUG:there is no message>") message=(msg.message or "<BUG:there is no message>")
} }
local text = mt_irc.message_format_out:expandvars(t) local text = mt_irc.message_format_out:expandvars(t)
irc.say(mt_irc.channel, text) irc.say(mt_irc.channel, text)
end end
mt_irc.buffered_messages = nil mt_irc.buffered_messages = nil
end end
irc.poll() irc.poll()
mt_irc.cur_time = mt_irc.cur_time - mt_irc.dtime mt_irc.cur_time = mt_irc.cur_time - mt_irc.dtime
end end
end) end)
mt_irc.part = function ( name ) mt_irc.part = function ( name )
if (not mt_irc.connected_players[name]) then if (not mt_irc.connected_players[name]) then
minetest.chat_send_player(name, "IRC: You are not in the channel."); minetest.chat_send_player(name, "IRC: You are not in the channel.");
return; return;
end end
mt_irc.connected_players[name] = nil; mt_irc.connected_players[name] = nil;
minetest.chat_send_player(name, "IRC: You are now out of the channel."); minetest.chat_send_player(name, "IRC: You are now out of the channel.");
end end
mt_irc.join = function ( name ) mt_irc.join = function ( name )
if (mt_irc.connected_players[name]) then if (mt_irc.connected_players[name]) then
minetest.chat_send_player(name, "IRC: You are already in the channel."); minetest.chat_send_player(name, "IRC: You are already in the channel.");
return; return;
end end
mt_irc.connected_players[name] = true; mt_irc.connected_players[name] = true;
minetest.chat_send_player(name, "IRC: You are now in the channel."); minetest.chat_send_player(name, "IRC: You are now in the channel.");
end end
mt_irc.connect = function ( ) mt_irc.connect = function ( )
mt_irc.connect_ok = irc.connect({ mt_irc.connect_ok = irc.connect({
network = mt_irc.server; network = mt_irc.server;
port = mt_irc.port; port = mt_irc.port;
nick = mt_irc.server_nick; nick = mt_irc.server_nick;
pass = mt_irc.password; pass = mt_irc.password;
timeout = mt_irc.timeout; timeout = mt_irc.timeout;
channel = mt_irc.channel; channel = mt_irc.channel;
}); });
if (not mt_irc.connect_ok) then if (not mt_irc.connect_ok) then
local s = "DEBUG: irc.connect failed"; local s = "DEBUG: irc.connect failed";
minetest.debug(s); minetest.debug(s);
minetest.chat_send_all(s); minetest.chat_send_all(s);
return; return;
end end
while (not mt_irc.got_motd) do while (not mt_irc.got_motd) do
irc.poll(); irc.poll();
end end
end end
mt_irc.say = function ( to, msg ) mt_irc.say = function ( to, msg )
if (not msg) then if (not msg) then
msg = to; msg = to;
to = mt_irc.channel; to = mt_irc.channel;
end end
to = to or mt_irc.channel; to = to or mt_irc.channel;
msg = msg or ""; msg = msg or "";
local msg2 = mt_irc._callback("msg_out", true, to, msg); local msg2 = mt_irc._callback("msg_out", true, to, msg);
if ((type(msg2) == "boolean") and (not msg2)) then if ((type(msg2) == "boolean") and (not msg2)) then
return; return;
elseif (msg2 ~= nil) then elseif (msg2 ~= nil) then
msg = tostring(msg); msg = tostring(msg);
end end
irc.say(to, msg); irc.say(to, msg);
end end
mt_irc.irc = irc; mt_irc.irc = irc;
@ -114,7 +114,7 @@ mt_irc.irc = irc;
-- Requested by Exio -- Requested by Exio
string.expandvars = function ( s, vars ) string.expandvars = function ( s, vars )
return s:gsub("%$%(([^)]+)%)", vars); return s:gsub("%$%(([^)]+)%)", vars);
end end
dofile(MODPATH.."/callback.lua"); dofile(MODPATH.."/callback.lua");
@ -123,5 +123,5 @@ dofile(MODPATH.."/botcmds.lua");
dofile(MODPATH.."/friends.lua"); dofile(MODPATH.."/friends.lua");
if (mt_irc.auto_connect) then if (mt_irc.auto_connect) then
mt_irc.connect() mt_irc.connect()
end end

File diff suppressed because it is too large Load Diff