combine.fm/routes/slack.js
2020-01-18 10:19:20 +00:00

63 lines
1.7 KiB
JavaScript

import kue from 'kue';
import request from 'superagent';
import debuglog from 'debug';
import { inspect } from 'util';
import lookup from '../lib/lookup.js';
import services from '../lib/services.js';
import { find, create } from '../lib/share.js';
const debug = debuglog('combine.fm:slack');
const queue = kue.createQueue({
redis: process.env.REDIS_URL,
});
const slackToken = process.env.SLACK_TOKEN;
export async function slack(ctx) {
if (ctx.request.method === 'GET') {
ctx.redirect('https://slack.com/oauth/authorize?client_id=349358389361.349904899522&install_redirect=general&scope=links:read,chat:write:bot');
return;
}
if (ctx.request.body.challenge) {
ctx.body = ctx.request.body.challenge;
return;
}
for (const link of ctx.request.body.event.links) {
if (link.domain === 'combine.fm') {
continue;
}
const music = await lookup(link.url);
debug(music);
const payload = {
channel: ctx.request.body.event.channel,
attachments: [
{
color: '#FE4365',
author_name: `${music.name} by ${music.artist.name}`,
author_link: `https://combine.fm/${music.service}/${music.type}/${music.id}`,
author_icon: music.artwork.small,
},
]
}
try {
const { body } = await request.post('https://slack.com/api/chat.postMessage')
.set('Authorization', `Bearer ${slackToken}`)
.send(payload);
debug(body)
} catch (err) {
debug(err);
}
}
ctx.body = 'OK';
}
export async function oauth() {
const { body } = await request.post('https://slack.com/api/oauth.access')
.set('Authorization', `Bearer ${slackToken}`)
.send(payload);
}