pleroma-comments/pleroma-comments.lua

83 lines
1.9 KiB
Lua
Raw Normal View History

2024-07-07 12:21:28 +05:30
-- can't resolve seggfault on luasec, luasocket'
-- local https = "wget"
local json = require("cjson")
function tokenizeString(inputString, delimiter)
local tokens = {}
for token in inputString:gmatch("[^" .. delimiter .. "]+") do
table.insert(tokens, token)
end
return tokens
end
function get_api_link(str)
local tokens = tokenizeString(str, '/')
-- 1 = protocol, 2 = host ...
-- https://host.tld/notice/12345
local id = tokens[#tokens]
local host = tokens[2]
return "https://" .. host .. "/api/v1/statuses/" .. id .. "/context"
end
function get(link)
local args = {
"-qO-",
link
}
local data = pandoc.pipe("wget", args, "")
local parsed = json.decode(data)
-- print(link)
return parsed
end
function short_date(timestamp)
local pattern = "(%d+)-(%d+)-(%d+)T(%d+):(%d+):(%d+).000Z"
local year, month, day, hour, min, sec = timestamp:match(pattern)
local epoch = os.time({
year = year,
month = month,
day = day,
hour = hour,
min = min,
sec = sec
})
return os.date("%a, %B %d, %Y", epoch)
end
function write_comments(pleroma_posts)
local template = [[
$datetime$
$alias$
$text$
]]
local comments = {}
local replies = pleroma_posts["descendants"]
for _, post in ipairs(replies) do
local datetime = short_date(post["created_at"])
local alias = post["account"]["acct"]
local text = post["pleroma"]["content"]["text/plain"]
local interpolated = template:gsub("%$(%w+)%$", {
datetime=datetime,
alias = alias,
text = text
})
print(interpolated)
end
return comments
end
function Meta(meta)
local elem = meta["pleroma-url"]
-- print(elem)
if elem == nil then
return -- abort
end
local s = pandoc.utils.stringify(elem)
local url = get_api_link(s)
write_comments(get(url))
end