add reply support and fix some bugs
This commit is contained in:
parent
7bf1a4d3fe
commit
3bc78e3991
3 changed files with 25 additions and 8 deletions
|
@ -1,6 +1,6 @@
|
||||||
-- Main privacy bot configuration file
|
-- Main privacy bot configuration file
|
||||||
config = {
|
config = {
|
||||||
-- Log verbosity
|
-- Log verbosity, 1 will print debug 0 will not. TODO: give more control over log output
|
||||||
verbosity = 1,
|
verbosity = 1,
|
||||||
-- Bot nickname
|
-- Bot nickname
|
||||||
name = "Privacy Link Bot",
|
name = "Privacy Link Bot",
|
||||||
|
@ -15,6 +15,8 @@ config = {
|
||||||
prefered_website_medium = "clearnet",
|
prefered_website_medium = "clearnet",
|
||||||
-- Choose random frontend instead of fallback one, will force clearnet
|
-- Choose random frontend instead of fallback one, will force clearnet
|
||||||
random_frontend = true,
|
random_frontend = true,
|
||||||
|
-- Reply using XEP-0461 instead of just quoting
|
||||||
|
use_reply_xep = true,
|
||||||
-- List of desired frontends to extract from `services.json`
|
-- List of desired frontends to extract from `services.json`
|
||||||
sites = {
|
sites = {
|
||||||
-- Key is domain pattern
|
-- Key is domain pattern
|
||||||
|
|
7
main.lua
7
main.lua
|
@ -1,5 +1,5 @@
|
||||||
-- Get the verse lib
|
-- Get the verse lib
|
||||||
local verse = require("verse")
|
verse = require("verse")
|
||||||
-- Setup logging and config
|
-- Setup logging and config
|
||||||
require("utils")
|
require("utils")
|
||||||
local log = setup_log(string.format("%s_main", config.name))
|
local log = setup_log(string.format("%s_main", config.name))
|
||||||
|
@ -39,12 +39,11 @@ client:hook("ready", function()
|
||||||
if body then
|
if body then
|
||||||
for site, services in pairs(config.sites) do
|
for site, services in pairs(config.sites) do
|
||||||
local instance = choose_instance(services.frontends)
|
local instance = choose_instance(services.frontends)
|
||||||
-- TODO: make it reply using XEP-0461
|
|
||||||
for match in string.gmatch(body, string.format("%%s(%s/%%S+)", site)) do
|
for match in string.gmatch(body, string.format("%%s(%s/%%S+)", site)) do
|
||||||
room:send_message(string.format("> %s\nPrivate frontend: %s", match, string.gsub(match, site, instance)))
|
send_reply_link(room, match, site, instance, event)
|
||||||
end
|
end
|
||||||
for match in string.gmatch(body, string.format("(https?://%s/%%S+)", site)) do
|
for match in string.gmatch(body, string.format("(https?://%s/%%S+)", site)) do
|
||||||
room:send_message(string.format("> %s\nPrivate frontend: %s", match, string.gsub(match, site, instance)))
|
send_reply_link(room, match, site, instance, event)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
22
utils.lua
22
utils.lua
|
@ -18,8 +18,7 @@ function log_callback(source, level, message, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
Make a new logger with `name` and setup a handler based on the log level `v`
|
Make a new logger with `name`
|
||||||
TODO: `v` needs to be figured out, for now it's 1 to print debug messages 0 to not print them or any other value to print nothing
|
|
||||||
]]--
|
]]--
|
||||||
function setup_log(name)
|
function setup_log(name)
|
||||||
local log_module = require("util.logger")
|
local log_module = require("util.logger")
|
||||||
|
@ -42,12 +41,29 @@ function read_all_text(file)
|
||||||
return text
|
return text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function send_reply_link(room, match, site, instance, event)
|
||||||
|
local msg = string.format("> %s\nPrivate frontend: %s", match, string.gsub(match, site, instance))
|
||||||
|
if config.use_reply_xep then
|
||||||
|
room:send(verse.message()
|
||||||
|
-- Set message text
|
||||||
|
:body(msg)
|
||||||
|
-- Set reply block
|
||||||
|
:tag("reply", {
|
||||||
|
xmlns = 'urn:xmpp:reply:0',
|
||||||
|
to = event.stanza.attr.from,
|
||||||
|
id = event.stanza.attr.id,
|
||||||
|
}))
|
||||||
|
else
|
||||||
|
room:send_message(msg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Choose instance from available services
|
-- Choose instance from available services
|
||||||
function choose_instance(services)
|
function choose_instance(services)
|
||||||
|
-- TODO: make it try all available services before falling back
|
||||||
-- Choose a random service
|
-- Choose a random service
|
||||||
local service = services[math.random(#services)]
|
local service = services[math.random(#services)]
|
||||||
-- Get list of instances for service
|
-- Get list of instances for service
|
||||||
local service_instances
|
|
||||||
for _, service_instance_list in pairs(config.instances) do
|
for _, service_instance_list in pairs(config.instances) do
|
||||||
if service_instance_list.type == service then
|
if service_instance_list.type == service then
|
||||||
-- Based on config choose instance
|
-- Based on config choose instance
|
||||||
|
|
Loading…
Reference in a new issue