129 lines
4.5 KiB
Lua
129 lines
4.5 KiB
Lua
local schemedef={
|
|
type = "table",
|
|
children={
|
|
message_prefix={type="string"},
|
|
mention_prefix={type="string"},
|
|
mention_delim={type="string"},
|
|
content_prefix={type="string"},
|
|
message_suffix={type="string"}
|
|
}
|
|
}
|
|
|
|
local conf_spec={type="table", required_children={
|
|
schemes={type="table", required_children={
|
|
minetest=schemedef
|
|
}, possible_children={
|
|
irc=schemedef,
|
|
discord=schemedef
|
|
}},
|
|
bridges={
|
|
type="table",
|
|
possible_children={
|
|
irc={type="table", required_children={
|
|
port={type="number", range={0, 65535}},
|
|
network={type="string"},
|
|
nickname={type="string"},
|
|
channelname={type="string"},
|
|
ssl={type="boolean"},
|
|
prefix={type="string"},
|
|
minetest_prefix={type="string"}
|
|
},
|
|
possible_children={
|
|
bridge={type="string", possible_values=modlib.table.set{"files", "sockets"}},
|
|
convert_minetest_colors={type="string", possible_values=modlib.table.set{"disabled", "hex", "safer", "safest"}},
|
|
handle_discord_markdown={type="boolean"},
|
|
handle_minetest_markdown={type="boolean"}
|
|
}
|
|
},
|
|
discord={type="table", required_children={
|
|
token={type="string"},
|
|
channelname={type="string"},
|
|
prefix={type="string"},
|
|
minetest_prefix={type="string"}
|
|
},
|
|
possible_children={
|
|
blacklist={type="table", keys={type="string"}},
|
|
whitelist={type="table", keys={type="string"}},
|
|
guild_id={type="string"},
|
|
bridge={type="string", possible_values=modlib.table.set{"files", "sockets"}},
|
|
convert_internal_markdown={type="boolean"},
|
|
convert_minetest_markdown={type="boolean"},
|
|
handle_irc_styles={type="string", possible_values=modlib.table.set{"escape_markdown", "convert", "disabled"}},
|
|
send_embeds={type="boolean"}
|
|
}
|
|
},
|
|
command_blacklist={type="table", keys={type="number"}, values={type="string"}},
|
|
command_whitelist={type="table", keys={type="number"}, values={type="string"}}
|
|
}
|
|
}
|
|
}, possible_children={
|
|
roles_case_insensitive={type="boolean"}
|
|
}}
|
|
|
|
local config=modlib.conf.import("adv_chat", conf_spec)
|
|
modlib.table.add_all(getfenv(1), config)
|
|
|
|
function load_schemes()
|
|
for k, v in pairs(schemes.minetest) do
|
|
schemes.minetest[k] = colorize_message(v)
|
|
end
|
|
|
|
for _,s in pairs({"irc", "discord"}) do
|
|
if not schemes[s] then
|
|
schemes[s] = {}
|
|
for k, v in pairs(schemes.minetest) do
|
|
schemes[s][k] = minetest.strip_colors(v)
|
|
end
|
|
end
|
|
end
|
|
|
|
load_schemes = nil
|
|
end
|
|
|
|
if bridges.irc and not bridges.irc.style_conversion then
|
|
bridges.irc.style_conversion={}
|
|
if not bridges.irc.style_conversion.colors then
|
|
bridges.irc.style_conversion.colors="disabled"
|
|
end
|
|
end
|
|
|
|
if bridges.discord then
|
|
|
|
local blacklist_empty=modlib.table.is_empty(bridges.discord.blacklist or {})
|
|
local whitelist_empty=modlib.table.is_empty(bridges.discord.whitelist or {})
|
|
if blacklist_empty then
|
|
if not whitelist_empty then
|
|
bridges.discord.blacklist=setmetatable(bridges.discord.blacklist, {__index=function(value)
|
|
if bridges.discord.whitelist[value] then
|
|
return nil
|
|
end
|
|
return true
|
|
end})
|
|
end
|
|
else
|
|
if not whitelist_empty then
|
|
bridges.discord.blacklist={}
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
if bridges.discord or bridges.irc then
|
|
|
|
bridges.command_blacklist = modlib.table.set(bridges.command_blacklist or {})
|
|
bridges.command_whitelist = modlib.table.set(bridges.command_whitelist or {})
|
|
local blacklist_empty=modlib.table.is_empty(bridges.command_blacklist)
|
|
local whitelist_empty=modlib.table.is_empty(bridges.command_whitelist or {})
|
|
if blacklist_empty then
|
|
if not whitelist_empty then
|
|
bridges.command_blacklist=setmetatable(bridges.command_blacklist, {__index=function(value)
|
|
if bridges.command_whitelist[value] then
|
|
return nil
|
|
end
|
|
return true
|
|
end})
|
|
end
|
|
end
|
|
|
|
end
|