Contents

Discord 自動化接收 GitHub Repository 通知

前陣子建立的團隊目前專案想認真繼續開發,自然需要找個工具取代 Line,經投票後,初次體驗使用 discord 而非 slack 做為溝通工具,剛好想整一些自動化通知,這篇紀錄最簡單的 GitHub PR 通知。

Webhook 是什麼?

一個被動接收訊息的機制,可以理解成大門管理員平常都在發呆,有特殊事件(例如有人拜訪、收信收快遞…等)時會通知住戶,住戶不需要頻繁到大門看是否有人來訪或有東西要收。

將上面的例子套用到本次的行為,會是:

Discord 設定

1. 找到伺服器設定

/images/discord_github_webhook_1.png

2. 找到整合 > Webhook

/images/discord_github_webhook_2.png

3. 新增 Webhook

按下去會出現如下圖的東西

/images/discord_github_webhook_3.png

圖片、名字都可以改,頻道是推播會送到的頻道。

4. 複製 Webhook 網址

這應該不用圖片了,按下去後會複製一串網址,格式如下:

https://discord.com/api/webhooks/{伺服器}/{Webhook識別}

GitHub 設定

1. 找到 Settings > Webhooks

/images/discord_github_webhook_4.png

2. 按下 Add webhook

/images/discord_github_webhook_5.png

3. 在 Payload URL 填入從 Discord 複製的網址

後面請手動加上 /github,否則你會得到 400 或 404。

4. 更改 Content type 為 application/json

就像平常打 POST Request 送 body 會需要指定 content type,這裡也要。

5. 按下 Add webhook

至此,只要有任何人 push 到 repository,discord 都會收到通知。

GitHub Webhook Event

在新增 GitHub webhook 時,可以注意到有個 Which events would you like to trigger this webhook?,我們剛剛勾選的是 Just the push event.,實際上,我們會希望接收的還有 PR 開啟/關閉時的通知,可改選 Let me select individual events. 後選擇。

補充一些注意到有被雷到的:

  1. PR 內直接 comment 的通知,需選擇 Issue comments.
  2. 暫時沒有找到只訂閱 Pull Request 有 push 的 event 的方法,只能訂閱 pushed.

可以發現能訂閱的 event 顆粒度有點大,其實是可以寫一個 server 去接收 GitHub webhook 後在做這件事,能訂閱的 event 可參考官方文件

流程

總結

目前團隊規模,使用 GitHub 提供的 Event 直接 POST 到 Discord 已足夠,也許未來有管理更大的團隊或是特殊需求時,再來考慮更細的通知管理。