mirror of
https://github.com/morten-olsen/share.nvim.git
synced 2026-02-08 01:36:30 +01:00
90 lines
2.2 KiB
Lua
90 lines
2.2 KiB
Lua
local curl = require "plenary.curl"
|
|
|
|
local function merge_lists(t1, t2)
|
|
local result = {}
|
|
table.foreach(t1, function(_, v) table.insert(result, v) end)
|
|
table.foreach(t2, function(_, v) table.insert(result, v) end)
|
|
return result
|
|
end
|
|
|
|
local function test_http_response(res)
|
|
local body = vim.fn.json_decode(res.body)
|
|
if body.error then
|
|
error("Slack error " .. body.error)
|
|
end
|
|
end
|
|
|
|
local M = function(slack_token)
|
|
local token = slack_token
|
|
local function post(receiver, content, opts)
|
|
local text = content
|
|
if opts.format == "code" then
|
|
text = "```\n" .. text .. "```"
|
|
end
|
|
local body = {
|
|
text = text,
|
|
channel = receiver.id,
|
|
as_user = true,
|
|
}
|
|
local res = curl.post("https://slack.com/api/chat.postMessage", {
|
|
body = vim.fn.json_encode(body),
|
|
headers = {
|
|
Authorization = "Bearer " .. token,
|
|
content_type = "application/json"
|
|
}
|
|
})
|
|
test_http_response(res)
|
|
end
|
|
|
|
local function fetch_channels()
|
|
local query = {
|
|
types = "public_channel,private_channel",
|
|
exclude_archived = "true",
|
|
limit = "1000",
|
|
}
|
|
local res = curl.get("https://slack.com/api/conversations.list", {
|
|
query = query,
|
|
headers = {
|
|
Authorization = "Bearer " .. token
|
|
}
|
|
})
|
|
test_http_response(res)
|
|
local channels = vim.fn.json_decode(res.body).channels
|
|
table.foreach(channels, function(_, k)
|
|
k.name = "# " .. k.name
|
|
end)
|
|
return channels
|
|
end
|
|
|
|
local function fetch_users()
|
|
local res = curl.get("https://slack.com/api/users.list", {
|
|
headers = {
|
|
Authorization = "Bearer " .. token
|
|
}
|
|
})
|
|
test_http_response(res)
|
|
local users = vim.fn.json_decode(res.body).members
|
|
table.foreach(users, function(_, k)
|
|
local name = k.real_name or k.name
|
|
if k.real_name then
|
|
name = name .. " (" .. k.name .. ")"
|
|
end
|
|
k.name = "@ " .. name
|
|
end)
|
|
return users
|
|
end
|
|
|
|
local function fetch_recipients()
|
|
local users = fetch_users()
|
|
local channels = fetch_channels()
|
|
return merge_lists(users, channels)
|
|
end
|
|
|
|
return {
|
|
fetch_recipients = fetch_recipients,
|
|
post = post,
|
|
}
|
|
end
|
|
|
|
return M
|