-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhandler.js
More file actions
59 lines (55 loc) · 2.08 KB
/
handler.js
File metadata and controls
59 lines (55 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'use strict';
const { WebClient } = require('@slack/client');
const token = process.env.SLACK_TOKEN;
const githubSlackUserMap = JSON.parse(process.env.GITHUB_SLACK_USER_MAP || '{}');
const web = new WebClient(token);
/* eslint-disable no-param-reassign */
module.exports.githubReviewRequestWebhook = async function (event, context, callback) {
const pullRequestEvent = JSON.parse(event.body);
console.log(githubSlackUserMap);
console.log(pullRequestEvent.action);
if (pullRequestEvent.action === "review_requested") {
const reviewee = pullRequestEvent.pull_request.user.login;
const reviewee_icon_url = pullRequestEvent.pull_request.user.avatar_url;
const reviewee_html_url = pullRequestEvent.pull_request.user.html_url;
const html_url = pullRequestEvent.pull_request.html_url;
const reviewers = (
pullRequestEvent.pull_request.requested_reviewers
.map(reviewer => reviewer.login)
.filter(githubUser => githubUser in githubSlackUserMap)
.map(githubUser => githubSlackUserMap[githubUser])
);
console.log(reviewers);
const userList = await web.users.list();
const reviewerIds = reviewers.map(
reviewer => userList.members.find(
member => member.real_name === reviewer
).id
);
console.log(reviewerIds);
const title = pullRequestEvent.pull_request.title;
const postMessages = (
reviewerIds
.map(reviewerId => web.chat.postMessage({
channel: reviewerId,
username: `${reviewee}님의 리뷰 요청`,
icon_url: reviewee_icon_url,
text: `*${title}*\n${html_url}\n풀리퀘스트에 대한 리뷰 요청이 들어왔습니다.\n`
}))
);
return Promise.all(postMessages).then(() => {
callback(null, {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"message": "PR nofication sended to reviewers"
})
});
});
}
callback(null, {
statusCode: 404,
headers: { 'Content-Type': 'application/json' },
body: '{"message": "No matched reviewers."}'
});
};