100 lines
4.6 KiB
Lua
100 lines
4.6 KiB
Lua
register_role("irc",{color="#FFFF66"})
|
|
|
|
local bridge
|
|
if bridges.irc.bridge == "files" then
|
|
bridge = build_file_bridge("irc")
|
|
else
|
|
bridge = build_bridge("irc")
|
|
end
|
|
|
|
irc_bridge = bridge
|
|
|
|
bridge.listen(function(line)
|
|
local linecontent=line:sub(6)
|
|
if modlib.text.starts_with(line, "[MSG]") then
|
|
local parts=modlib.text.split(linecontent, " ", 2)
|
|
local src=parts[1].."[irc]"
|
|
local adv_msg=message.new(chatters[src], nil, parts[2])
|
|
adv_msg.sent_to="irc"
|
|
send_to_all(adv_msg)
|
|
elseif modlib.text.starts_with(line, "[PMS]") then
|
|
local parts=modlib.text.split(linecontent, " ", 1)
|
|
local source=parts[1]
|
|
local target=parts[2]
|
|
local msg=parts[3]
|
|
if modlib.text.ends_with(target, "[discord]") then
|
|
discord_bridge.write("[PMS]"..source.." "..target.."@you : "..msg)
|
|
else
|
|
if minetest.get_player_by_name(target_and_msg[1]) then
|
|
minetest.chat_send_player(target_and_msg[2])
|
|
end
|
|
end
|
|
elseif modlib.text.starts_with(line, "[CMD]") then
|
|
local parts=modlib.text.split(linecontent, " ", 2)
|
|
local source=parts[1]
|
|
local call=parts[2]
|
|
local success, retval = call_chatcommand(source.."[irc]", call)
|
|
local prefix="Unknown"
|
|
if success then prefix="Success" elseif success ~= nil then prefix="Error" end
|
|
irc_bridge.write("[PMS]"..source.." "..prefix.." : "..(retval or "No return value."))
|
|
elseif modlib.text.starts_with(line, "[GMS]") or modlib.text.starts_with(line, "[CGM]") then -- GMS = group message or CGM = channel group message
|
|
local parts=modlib.text.split(linecontent, " ",3)
|
|
local source=parts[1]
|
|
local targets=modlib.text.split_without_limit(parts[2], ",")
|
|
local msg=parts[3]
|
|
local sent_to
|
|
if modlib.text.starts_with(line, "[CGM]") then
|
|
sent_to="irc"
|
|
end
|
|
local adv_msg=message.new(chatters[source.."[discord]"], targets, msg)
|
|
adv_msg.sent_to=sent_to
|
|
message.mentionpart(adv_msg) --force check mentions
|
|
send_to_targets(adv_msg)
|
|
if (#adv_msg.invalid_mentions) == 1 then
|
|
irc_bridge.write("[PMS]"..source.." The target "..adv_msg.invalid_mentions[1].." is inexistant.")
|
|
elseif (#adv_msg.invalid_mentions) > 1 then
|
|
irc_bridge.write("[PMS]"..source.." The targets "..table.concat(adv_msg.invalid_mentions, ", ").." are inexistant.")
|
|
end
|
|
elseif modlib.text.starts_with(line, "[JOI]") then
|
|
local parts=modlib.text.split(linecontent, " ", 3) --nick & color & channel
|
|
join(parts[1].."[irc]", {color=parts[2], roles={}, irc=true})
|
|
local chattername=parts[1].."[irc]"
|
|
minetest.chat_send_all(mt_color(chattername)..
|
|
chattername..minetest.get_color_escape_sequence("#FFFFFF").." joined.")
|
|
elseif modlib.text.starts_with(line, "[EXT]") then
|
|
local parts=modlib.text.split(linecontent, " ", 2) --nick & reason
|
|
local chattername=parts[1].."[irc]"
|
|
minetest.chat_send_all(mt_color(chattername)..chattername..minetest.get_color_escape_sequence("#FFFFFF").." quitted ("..parts[2]..").")
|
|
leave(chattername)
|
|
elseif modlib.text.starts_with(line, "[BYE]") then
|
|
local parts=modlib.text.split(linecontent, " ", 2) --nick & reason
|
|
local chattername=parts[1].."[irc]"
|
|
minetest.chat_send_all(mt_color(chattername)..chattername..minetest.get_color_escape_sequence("#FFFFFF").." left ("..parts[2]..").")
|
|
leave(chattername)
|
|
elseif modlib.text.starts_with(line, "[NCK]") then
|
|
local parts=modlib.text.split(linecontent, " ", 2) --nick & newnick
|
|
local chattername=parts[1].."[irc]"
|
|
local new_chattername=parts[2].."[irc]"
|
|
rename(chattername, new_chattername)
|
|
end
|
|
end)
|
|
|
|
-- Pinging
|
|
modlib.minetest.register_globalstep(1, function()
|
|
bridge.write("[PIN]")
|
|
end)
|
|
|
|
bridge.serve()
|
|
|
|
-- Start AFTER mods are loaded, so that the player sees chat messages
|
|
minetest.register_on_mods_loaded(function()
|
|
local java="java"
|
|
local classpath=minetest.get_modpath("adv_chat").."/MinetestChatBridgeIRCBot/build/classes/java/main"
|
|
local port=bridges.irc.port
|
|
local network=bridges.irc.network
|
|
local ssl=tostring(bridges.irc.ssl)
|
|
local nick=bridges.irc.nickname
|
|
local textchannel=bridges.irc.channelname
|
|
local prefixes='"'..bridges.irc.minetest_prefix..'" "'..bridges.irc.prefix..'"'
|
|
bridge.start(java..' -Dfile.encoding=UTF-8 -classpath "'..classpath..'" appguru.Main '..port..' "'..network..'" '..ssl..' "'..nick..'" "'..textchannel..'" "%s" "%s" "%s" '..prefixes..' &')
|
|
end) |