-- 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(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, instance) local template = [[
$text$]] local comments = {} local replies = pleroma_posts["descendants"] for _, post in ipairs(replies) do local pid = post["id"] local datetime = short_date(post["created_at"]) local uid = post["account"]["id"] local alias = post["account"]["acct"] local text = post["pleroma"]["content"]["text/plain"] local interpolated = template:gsub("%$(%w+)%$", { host=instance, pid=pid, datetime=datetime, uid = uid, alias = alias, text = text }) -- print(interpolated) table.insert( comments, pandoc.RawBlock("html", interpolated) ) end -- print(comments) return comments end function Meta(meta) local elem = meta["pleroma-url"] -- print(elem) if elem == nil then return -- abort end local str = pandoc.utils.stringify(elem) local tokens = tokenizeString(str, '/') -- 1 = protocol, 2 = host ... -- https://host.tld/notice/12345 local id = tokens[#tokens] local host = tokens[2] local url = "https://" .. host .. "/api/v1/statuses/" .. id .. "/context" meta["comments"] = write_comments(get(url), "https://" .. host) return meta end