forked from minetest-mods/irc
Added support for joining/parting the channel
This commit is contained in:
parent
b37f4b21d6
commit
f62cd34d42
19
README.txt
19
README.txt
@ -111,9 +111,12 @@ All settings are changed in the `config.lua' file. If any of these settings
|
|||||||
In the default configuration, this will yield:
|
In the default configuration, this will yield:
|
||||||
<mtuser@IRC[#minetest-irc-testing]> Hello!
|
<mtuser@IRC[#minetest-irc-testing]> Hello!
|
||||||
|
|
||||||
-- Enable debug output (boolean, default false)
|
mt_irc.debug (boolean, default false)
|
||||||
mt_irc.debug = true;
|
Whether to output debug information.
|
||||||
|
|
||||||
|
mt_irc.connect_on_join (boolean, default false)
|
||||||
|
If true, players are connected by default. If false, players
|
||||||
|
have to use the /irc_connect command to connect to the server.
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
-----
|
-----
|
||||||
@ -122,11 +125,17 @@ Once the game is connected to the IRC channel, chatting using the 'T' or
|
|||||||
by anyone. Also, when someone sends a message to the channel, that text
|
by anyone. Also, when someone sends a message to the channel, that text
|
||||||
will be visible in-game.
|
will be visible in-game.
|
||||||
|
|
||||||
This mod also adds one chat command:
|
This mod also adds a few chat commands:
|
||||||
|
|
||||||
/msg nick message
|
/msg <nick> <message>
|
||||||
Sends a private message to the IRC user whose nickname is `nick'.
|
Sends a private message to the IRC user whose nickname is `nick'.
|
||||||
|
|
||||||
|
/join
|
||||||
|
Join the IRC channel.
|
||||||
|
|
||||||
|
/part
|
||||||
|
Part the IRC channel.
|
||||||
|
|
||||||
You can also send private messages from IRC to in-game players, though
|
You can also send private messages from IRC to in-game players, though
|
||||||
it's a bit tricky.
|
it's a bit tricky.
|
||||||
|
|
||||||
@ -135,7 +144,7 @@ To do it, you must send a private message to the "proxy" user (set with
|
|||||||
>playername message
|
>playername message
|
||||||
For example, if there's a player named `mtuser', you can send him/her
|
For example, if there's a player named `mtuser', you can send him/her
|
||||||
a private message with:
|
a private message with:
|
||||||
>mtuser Hello!
|
/msg server_nick >mtuser Hello!
|
||||||
|
|
||||||
To avoid possible misunderstandings (since all in-game players use the
|
To avoid possible misunderstandings (since all in-game players use the
|
||||||
same IRC user to converse with you), the "proxy" user will reject any
|
same IRC user to converse with you), the "proxy" user will reject any
|
||||||
|
@ -10,6 +10,13 @@ Version 0.1.1:
|
|||||||
- Now all sources (including Lua itself) are added to a single
|
- Now all sources (including Lua itself) are added to a single
|
||||||
luasocket lib. This will hopefully fix some cases where the linker
|
luasocket lib. This will hopefully fix some cases where the linker
|
||||||
b0rk3d with undefined references under Linux.
|
b0rk3d with undefined references under Linux.
|
||||||
|
- Added option to enable/disable connecting when starting the game, and
|
||||||
|
the /irc_connect chat command to connect manually to the server (as
|
||||||
|
suggested by OldCoder). The /irc_connect chat command requires the
|
||||||
|
`irc_admin' privilege.
|
||||||
|
- Added option to enable/disable joining the channel when a player joins,
|
||||||
|
and the /join and /part chat commands to join and part the channel
|
||||||
|
manually if desired (as suggested by OldCoder).
|
||||||
|
|
||||||
Version 0.1.0:
|
Version 0.1.0:
|
||||||
- At least it's working :)
|
- At least it's working :)
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
-- *************************
|
-- *************************
|
||||||
|
|
||||||
-- Server to connect on joinplayer (string, default "irc.freenode.net")
|
-- Server to connect on joinplayer (string, default "irc.freenode.net")
|
||||||
--mt_irc.server = nil;
|
mt_irc.server = nil;
|
||||||
mt_irc.server = "localhost";
|
|
||||||
|
|
||||||
-- Port to connect on joinplayer (number, default 6667)
|
-- Port to connect on joinplayer (number, default 6667)
|
||||||
mt_irc.port = nil;
|
mt_irc.port = nil;
|
||||||
@ -40,3 +39,11 @@ mt_irc.message_format_in = "<$(name)@IRC> $(message)";
|
|||||||
|
|
||||||
-- Enable debug output (boolean, default false)
|
-- Enable debug output (boolean, default false)
|
||||||
mt_irc.debug = true;
|
mt_irc.debug = true;
|
||||||
|
|
||||||
|
-- Whether to automatically join the channed when player joins
|
||||||
|
-- (boolean, default false)
|
||||||
|
mt_irc.connect_on_join = false;
|
||||||
|
|
||||||
|
-- Whether to automatically connect to the server on mod load
|
||||||
|
-- (boolean, default false)
|
||||||
|
mt_irc.connect_on_load = false;
|
||||||
|
111
src/init.lua
111
src/init.lua
@ -19,6 +19,7 @@ dofile(MODPATH.."/config.lua");
|
|||||||
|
|
||||||
mt_irc.cur_time = 0;
|
mt_irc.cur_time = 0;
|
||||||
mt_irc.buffered_messages = { };
|
mt_irc.buffered_messages = { };
|
||||||
|
mt_irc.connected_players = { };
|
||||||
|
|
||||||
package.path = MODPATH.."/?.lua;"..package.path;
|
package.path = MODPATH.."/?.lua;"..package.path;
|
||||||
package.cpath = MODPATH.."/lib?.so;"..MODPATH.."/?.dll;"..package.cpath;
|
package.cpath = MODPATH.."/lib?.so;"..MODPATH.."/?.dll;"..package.cpath;
|
||||||
@ -43,10 +44,19 @@ mt_irc.server = (mt_irc.server or "irc.freenode.net");
|
|||||||
mt_irc.port = (mt_irc.port or 6667);
|
mt_irc.port = (mt_irc.port or 6667);
|
||||||
mt_irc.channel = (mt_irc.channel or "#minetest-irc-testing");
|
mt_irc.channel = (mt_irc.channel or "#minetest-irc-testing");
|
||||||
mt_irc.dtime = (mt_irc.dtime or 0.2);
|
mt_irc.dtime = (mt_irc.dtime or 0.2);
|
||||||
|
mt_irc.timeout = (mt_irc.timeout or 60.0);
|
||||||
mt_irc.message_format_out = (mt_irc.message_format_out or "<$(nick)> $(message)");
|
mt_irc.message_format_out = (mt_irc.message_format_out or "<$(nick)> $(message)");
|
||||||
mt_irc.message_format_in = (mt_irc.message_format_in or "<$(name)@IRC[$(channel)]> $(message)");
|
mt_irc.message_format_in = (mt_irc.message_format_in or "<$(name)@IRC[$(channel)]> $(message)");
|
||||||
|
if (mt_irc.connect_on_join == nil) then mt_irc.connect_on_join = false; end
|
||||||
|
if (mt_irc.connect_on_load == nil) then mt_irc.connect_on_load = false; end
|
||||||
|
|
||||||
|
minetest.register_privilege("irc_admin", {
|
||||||
|
description = "Allow IRC administrative tasks to be performed.";
|
||||||
|
give_to_singleplayer = true;
|
||||||
|
});
|
||||||
|
|
||||||
minetest.register_globalstep(function ( dtime )
|
minetest.register_globalstep(function ( dtime )
|
||||||
|
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
|
||||||
@ -71,17 +81,14 @@ end);
|
|||||||
|
|
||||||
minetest.register_on_joinplayer(function ( player )
|
minetest.register_on_joinplayer(function ( player )
|
||||||
|
|
||||||
if (not mt_irc.connect_ok) then
|
|
||||||
minetest.chat_send_player(player:get_player_name(), "IRC: Failed to connect to server.");
|
|
||||||
return;
|
|
||||||
end
|
|
||||||
|
|
||||||
irc.register_callback("connect", function ( )
|
irc.register_callback("connect", function ( )
|
||||||
|
if (not mt_irc.connect_ok) then return; end
|
||||||
irc.join(mt_irc.channel);
|
irc.join(mt_irc.channel);
|
||||||
irc.say(mt_irc.channel, "*** "..player:get_player_name().." joined the game");
|
irc.say(mt_irc.channel, "*** "..player:get_player_name().." joined the game");
|
||||||
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
|
||||||
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>");
|
||||||
@ -90,10 +97,13 @@ minetest.register_on_joinplayer(function ( player )
|
|||||||
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)
|
||||||
minetest.chat_send_all(text);
|
for k, v in pairs(mt_irc.connected_players) do
|
||||||
|
if (v) then minetest.chat_send_player(k, text); end
|
||||||
|
end
|
||||||
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
|
||||||
local player_to;
|
local player_to;
|
||||||
local msg;
|
local msg;
|
||||||
if (message:sub(1, 1) == ">") then
|
if (message:sub(1, 1) == ">") then
|
||||||
@ -105,6 +115,10 @@ minetest.register_on_joinplayer(function ( player )
|
|||||||
irc.say(from, 'Please use the ">username message" syntax.');
|
irc.say(from, 'Please use the ">username message" syntax.');
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
if (not mt_irc.connected_players[player_to]) then
|
||||||
|
irc.say(from, "User `"..player_to.."' is not connected to IRC.");
|
||||||
|
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=(msg or "<BUG:there is no message>");
|
message=(msg or "<BUG:there is no message>");
|
||||||
@ -117,15 +131,26 @@ minetest.register_on_joinplayer(function ( player )
|
|||||||
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
|
||||||
end);
|
end);
|
||||||
|
|
||||||
|
mt_irc.connected_players[player:get_player_name()] = mt_irc.connect_on_join;
|
||||||
|
|
||||||
end);
|
end);
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function ( player )
|
minetest.register_on_leaveplayer(function ( player )
|
||||||
irc.say(mt_irc.channel, "*** "..player:get_player_name().." left the game");
|
if (not mt_irc.connect_ok) then return; end
|
||||||
|
local name = player:get_player_name();
|
||||||
|
mt_irc.connected_players[name] = false;
|
||||||
|
irc.say(mt_irc.channel, "*** "..name.." left the game");
|
||||||
end);
|
end);
|
||||||
|
|
||||||
minetest.register_on_chat_message(function ( name, message )
|
minetest.register_on_chat_message(function ( name, message )
|
||||||
|
if (not mt_irc.connected_players[name]) then
|
||||||
|
minetest.chat_send_player(name, "IRC: You are not connected. Please use /join");
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
if (not mt_irc.connect_ok) then return; 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
|
||||||
@ -140,6 +165,10 @@ minetest.register_chatcommand("msg", {
|
|||||||
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
|
||||||
|
minetest.chat_send_player(name, "IRC: You are not connected use /irc_connect.");
|
||||||
|
return;
|
||||||
|
end
|
||||||
local pos = param:find(" ", 1, true);
|
local pos = param:find(" ", 1, true);
|
||||||
if (not pos) then return; end
|
if (not pos) then return; end
|
||||||
local name = param:sub(1, pos - 1);
|
local name = param:sub(1, pos - 1);
|
||||||
@ -153,10 +182,64 @@ minetest.register_chatcommand("msg", {
|
|||||||
end;
|
end;
|
||||||
});
|
});
|
||||||
|
|
||||||
mt_irc.connect_ok = pcall(irc.connect, {
|
minetest.register_chatcommand("irc_connect", {
|
||||||
network = mt_irc.server;
|
params = "";
|
||||||
port = mt_irc.port;
|
description = "Connect to the IRC server";
|
||||||
nick = mt_irc.server_nick;
|
privs = { irc_admin=true; };
|
||||||
pass = mt_irc.password;
|
func = function ( name, param )
|
||||||
timeout = mt_irc.timeout;
|
if (mt_irc.connect_ok) then
|
||||||
|
minetest.chat_send_player(name, "IRC: You are already connected.");
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
mt_irc.connect_ok = pcall(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;
|
||||||
|
});
|
||||||
|
minetest.chat_send_player(name, "IRC: You are now connected.");
|
||||||
|
irc.say(mt_irc.channel, name.." joined the channel.");
|
||||||
|
end;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
minetest.register_chatcommand("join", {
|
||||||
|
params = "";
|
||||||
|
description = "Join the IRC channel";
|
||||||
|
privs = { shout=true; };
|
||||||
|
func = function ( name, param )
|
||||||
|
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.");
|
||||||
|
end;
|
||||||
|
});
|
||||||
|
|
||||||
|
minetest.register_chatcommand("part", {
|
||||||
|
params = "";
|
||||||
|
description = "Part the IRC channel";
|
||||||
|
privs = { shout=true; };
|
||||||
|
func = function ( name, param )
|
||||||
|
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] = false;
|
||||||
|
minetest.chat_send_player(name, "IRC: You are now out of the channel.");
|
||||||
|
irc.say(mt_irc.channel, name.." is no longer in the channel.");
|
||||||
|
end;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (mt_irc.connect_on_load) then
|
||||||
|
mt_irc.connect_ok = pcall(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;
|
||||||
|
});
|
||||||
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user