開発チームのDiscordに感謝メッセージ付きでGitHubの変更通知を送る

## やりたいこと

GitHub Organizationを使ってチーム開発するときに、開発チームのDiscordにコミット通知とかを飛ばしたいです。

学生のロボット開発とかだとチーム内のモチベーション維持が一番大事なので「あっ、あいつ今進捗産んでるのか。」っていう雰囲気を出すことでやる気を維持したいと思います！！！

## 成果物

![スクリーンショット 2023-12-09 22.14.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/b245407b-23cc-3cba-54a7-742468248f03.png)

こんな感じでGitHubからの通知と感謝メッセージを送ってくれます。Issueは特に見逃したらやばいので通知してくれます。

## 実現手段

GitHubのWebhookをDiscordにBotとして追加する

## チャンネルを作る

コミットって結構頻繁にやるので、通常の会話とは隔離したいです。チャンネルを新しく作るのが無難だと思います。

![スクリーンショット 2023-12-09 20.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/7f3be8ee-1550-2191-5bb6-79979e6e2a79.png)

こんな感じです。

## Webhook URLを発行する

![スクリーンショット 2023-12-09 20.01.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/d99e56f5-7818-ae42-78e7-89cf46524714.png)

「ウェブフックを作成」を押して

![スクリーンショット 2023-12-09 20.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/2a72f442-f25a-7d9c-9db1-651907a2a746.png)

- 任意の名前
- さっき作成したチャンネル
- アイコン

を設定します。今回私は可愛いOctocatのアイコンを作成して使いました。

https://myoctocat.com/build-your-octocat/

できたらウェブフックURLをコピーしておきます。

## Webhookのテスト

ターミナルで以下のコマンドを叩きます。

```zsh
% curl -X POST -F content="やぁ！進捗どうだい？" https://discord.com/api/webhooks/**********
```

うまくいけば先ほどのチャンネルにOctocat名義でメッセージが届きます。

![スクリーンショット 2023-12-09 20.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/7cf73add-ea42-7c5f-c63a-611666924fd4.png)

早速メンバーがなんか変なリプを飛ばしてきましたが、少なくともモチベーション維持の効果があるようです。~~ちょろすぎ~~

## GitHub OrganizationにWebhookを登録

`https://github.com/organizations/YOUR_ORGANIZATION/settings/hooks`にアクセスして右上のAdd webhookを押します。

 ![スクリーンショット 2023-12-09 21.22.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/70acf883-d89e-43fa-0901-54993e188d06.png)

- Payload URL さっきのURL **+末尾に** `/github`
- Contetnt type `application/json`にする
- Which events whold you like to trigger this webhook?は適当なものを選ぶ

:::note warn
末尾の`/github`をつけ忘れると何も動かないので注意してください！！
:::


CommitとかIssueとからへんを設定するといいと思います。後述する感謝メッセージを送りたい人はGitHub Actions関連のチェックを外さないと多重が起こるので気をつけてください。

![スクリーンショット 2023-12-09 21.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/d01762fd-ed64-953a-a87b-d5a32166f67a.png)

この状態で何かアクションをGitHubでとるとこのようなメッセージがきます。

## 感謝メッセージ

GitHubからの通知だけだと味気ないのでGitHub Actionを使って感謝メッセージを送りたいと思います。

OrganizationのSettingsのActions secrets and variablesに`WEBHOOK_URL`という名前でsecretsを登録します。

![スクリーンショット 2023-12-09 22.02.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628782/e433745e-d0d5-970f-0f9a-8b6ed181b737.png)

そして変化があった時に感謝メッセージを送りたいリポジトリにGitHub Actionsを追加していきます。

```yaml:commit_notify.yml
name: commit notify

on:
  push:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Discord Message Notify
      run: curl -X POST -F content="${{ github.actor }}がコミットしてくれた！！進捗ありがとう😁" ${{ secrets.WEBHOOK_URL }}
```

```yaml:issue_notify.yml
name: Issue notify

on:
  issues:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Discord Message Notify
      run: curl -X POST -F content="${{ github.actor }}がIssueを立てたよ👀 みんな確認して‼️ @everyone" ${{ secrets.WEBHOOK_URL }}
```

~~感謝しなくていいような~~しょうもないリポジトリには追加しなくていいです。

## 動作確認

適当にコミットしたりIssue建てたりして通知が来たら成功です。

## おわりに

みんなやる気出してくれるといいな