コード
Google App Scriptに作成してください。
https://script.google.com/home
function doPost(e) {
const params = JSON.parse(e.postData.getDataAsString())
const paramsBody = params.comment.body
const githubMessageSender = params.sender.login
const githubHookAction = params.action
const githubHookIssueTitle = params.issue.title
const githubHookIssueNumber = params.issue.number
const githubMessageUrl = params.comment.html_url
const slackMessageReceivers = getSlackMessageReceivers(accountsList, paramsBody)
const githubMessageSenderSlackAccount = getGithubMessageSenderSlackAccount(accountsList, githubMessageSender)
const payloadData = {
attachments: [
{
fallback: "hogehoge-text",
color: "#FF66AD",
pretext: slackMessageReceivers,
author_name: ':octocat: github to mention',
title: `${githubHookAction} issue ${githubHookIssueTitle} #${githubHookIssueNumber}`,
title_link: githubMessageUrl,
text: `📩 ${paramsBody}`,
footer: `Sender: @${githubMessageSenderSlackAccount}`,
}
]
}
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payloadData)
};
UrlFetchApp.fetch('https://hooks.slack.com/services/slack-web-hook-url', options);
}
// アカウントのリストです
const accountsList = [
{
github: 'satou-tarou-hoge',
slack: 'satou-tarou-hoge',
},
{
github: 'yamada-hanako-hoge',
slack: 'yamada-hanako-hoge',
}
]
// githubから送信したメッセージの中からメンションを探して返します
function getSlackMessageReceivers(list, paramsBody) {
let result = ''
list.forEach((account, i) => {
const found = paramsBody.indexOf('@' + account.github + ' ') !== -1
if (found) {
result += `<@${accountsList[i].slack}> `
}
})
return result
}
// githubからメッセージを送信したアカウントに紐づくslackアカウントを返します
function getGithubMessageSenderSlackAccount(list, githubMessageSender) {
const found = list.find(account => {
const result = account.slack === githubMessageSender
return result
})
return found.slack
}
上記が完成したら、publishからDeploy as web appを選択して、publishしてください。
publish後に表示されるエンドポイントをgithubから叩いてください。
上記コード中のhttps://hooks.slack.com/services/slack-web-hook-url
を自分のslackのIncoming webhookに設定してください。
https://api.slack.com/apps ボットを作って、Incoming webhookを設定してください。そのurlです。
Google App Scriptはインポートしなくても他のファイルが呼び出せて、ちょっと気持ち悪かった。
githubが買収した?pull pandaが早く使いたい。
slackのgithub notifyがmentionを相互に変換してくれればいいのに。