adv_chat/irc.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)