Discord Botを認証済みBotにした時にやった事


こんにちは。晴吉（はるきち）と言います。
無料で使えるDiscord読み上げBot『よむぞう』を開発・運営しています。
Discord読み上げBot『よむぞう』に興味がありましたら下記の公式サイトから導入してみて下さい！

https://yomzottsbot.wixsite.com/yomzottsbot

# はじめに
Discord Botを公開していると、いつかは100サーバーの壁にぶち当たります。
その壁の向こう側に行くためには、認証済みBotにする必要があります。

認証済みBotとは![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/809cec85-942b-a15f-8030-527770a70936.png)のようなチェックマークが付いたバッチを持つBotのことです。
このバッチは、Discordに認められたBotの証であり、Bot開発者とって憧れだったりします。

今回は、私が認証済みBotの申請をした時にやった事をまとめてみました。

## 申請資格について

### Discordから謎のDMが届く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/6050cfff-b1f2-e2d0-7dca-b15d297c7071.png)
まず最初に、Discord Botの導入数が75サーバー以上になると、Discordから上の図ような謎のDMが届きます。

DMを要約すると下のような感じです。

:::note info
「あなたのBotが75サーバー以上に登録されました！おめでとう！
100サーバー以上登録できるようにするには、認証済みBotの申請してね！」
:::

これを無視しつづけると当然100サーバー以上の登録が出来ません。

### Discord Developer PotalのBot設定画面に見慣れないボタンが出現
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/54fcd32b-8745-c807-4660-c45987ce0020.png)
次に、Discord Developer Potal を開いてBot設定画面を見ると、上の図ような見慣れないボタンが出現しています。
このボタンをぽちっと押すと、認証済みBotの申請が開始されるのですが、申請をするためには色々と準備が必要になります。

## 必要な事前準備
### 申請に必要なもの

 * 身分証明書登録（運転免許証、または、パスポート、または、マイナンバーカード）
 * Botの招待リンク
 * 利用規約とプライバシーポリシのページ

### 身分証明書の登録をする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/bdb58c37-3ea5-7a70-d476-ad93f636a2e8.png)
Discord Developer Potal のBot設定画面にある[Get Started]ボタンを押すと、下の図のような画面に切り替わって、身分証登録を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/a46304c7-a959-317d-9999-2a80331e0cab.png)
[Verify Me]ボタンを押すと、下の図のようなStripe本人認証画面が起動して、身分証明書の登録をすることになります。私の記憶が正しければ、身分証明書をスマホで撮影して登録しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/570171d8-602e-2441-dd26-7e297ab7a581.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/855640ca-b2d5-a828-56d5-f0974d6a3ddc.png)
正しく身分証明書が登録されると、[Verify Me]ボタンが上の図のようなチェックマークに変わります。

Stripe本人認証については、DiscordのFAQにまとめられています。

https://support-dev.discord.com/hc/ja/articles/6226051178775-Stripe%E6%9C%AC%E4%BA%BA%E8%AA%8D%E8%A8%BC-FAQ

:::note warn
FAQによると3年ごとに再認証しないといけないみたいです。
再認証を放置すると認証済みBotの資格を失うので注意が必要です。
:::

### Botの招待リンクを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/a531d1a5-48db-8668-4973-c55859e28a35.png)
BOTの招待リンクをOAuth2 URL Generatorで作っているだけだと申請エラーになるので、InstallationページからBotの招待リンクを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/e7a1f700-6080-c8b2-3c3d-dad111772ef2.png)
この画面で招待リンクを作ると上の図のようにBotプロフィール画面に[アプリを追加]ボタンが作られます。
これでBotの招待リンクの作成は完了です。

### 利用規約とプライバシーポリシーのページを作る

ここは少し大変な作業です。ゼロから作るのは大変なので、自分も色々なテンプレートを参考にしました。一番役に立ったページを紹介します。

##### 利用規約テンプレート
https://kiyaku.jp/hinagata/gp.html
##### プライバシーポリシーテンプレート
https://kiyaku.jp/hinagata/privacy.html

ちなみに自分のBotの利用規約とプライバシーポリシーは下のような感じで作りました。

https://yomzottsbot.wixsite.com/yomzottsbot/%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84

https://yomzottsbot.wixsite.com/yomzottsbot/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/2f60c786-f417-c4d8-b7fb-631fc0ec9f0c.png)
利用規約とプライバシーポリシーが出来たらDiscord Developer PotalのBot設定画面にURLを登録します。

ここまでが申請の事前準備です。

## いざ申請へ

申請フォームでは、Botについて根掘り葉掘り聞かれます。
これらはすべて英語で答えないといけないので、翻訳サイトを駆使しながら英語で答えました。

## 申請フォームの質問内容

#### Application Details
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/14db2d82-7fca-b0d8-a081-077f6543679c.png)
Botの詳細について質問されます。
各コマンドの説明とそのコマンドはどんな動きをするかをコマンド実行時の画面や動画リンクも付けて説明する必要があります。

#### Data Collection
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/5ce1fc4e-f04f-76fa-d259-c388b2aeb43b.png)
Botが収集するデータについて質問されます。
* どのようなDiscordのデータを保存しているのか？
* メッセージ内容を保存しているか？
* 収集した情報は何の目的で保存しているのか？
* どのくらいの期間保存しているのか？
* ユーザーがデータ削除のリクエストをしたい場合のプロセスにはどのようなものがあるか？


#### Infrastructure
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/efbe30ff-ed58-81b1-a292-ed2630dc3d87.png)
Botが稼働しているインフラについて質問されます。
* Botをどのようにホストしているのか？
* Botの開発ライブラリは？
* Botの安全性を保つ方法は？
* ユーザーがBotに関するセキュリティー上の懸念やその他質問する場合の連絡手段は？

これらを入力したら送信ボタンをぽちっと押します。

この申請リクエストが送信されると、Discord担当者から直接メールで質問されたりします。
質問は英語なのでこちらも英語で答えていきます。

:::note warn
注意点として、説明が曖昧だったり不適切な処理と判断されると容赦なく申請が却下されます。そのたびに申請フォームの内容を修正して申請し直します。
ここは根気が必要です。
:::

そして何回かやり取りすると、

:::note info
「あなたのBotは認証されました！」
:::

みたいなメールが届いてBotが認証されて![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/809cec85-942b-a15f-8030-527770a70936.png)が付きます。


## 申請はまだ終わらない！次は特権インテント申請が待っている！

#### 特権インテントについて
| Intent | 説明 |
|:-----------|:------------|
| Presense Intent | メンバーのログイン状態やアクティビティなどを取得する時に必要なインテント |
| Server Members Intent  | メンバーのサーバー入退出やニックネームやロールの変更などのイベントを取得する時に必要なインテント |
| Message Content Intent  | メッセージ本文を取得する時に必要なインテント |

#### 特権インテント申請しないとどうなる？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/eca8a10b-055a-b58f-0e72-341ff39b4b03.png)
認証済みBotになっても特権インテントを使っているとサーバー登録数は制限されたままなので、別途申請をする必要があります。

#### 特権インテント申請時の質問について
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/2e0f7dc6-5e38-ab49-6a2a-1419091c19ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472930/f908325d-ebf4-03db-a30d-c5c50e478867.png)
私の場合は、Message Content Intentの申請を行い、下のような質問をされました。
* アプリの詳細について
* どの特権インテントを使うかチェック
* なぜその特権インテントが必要なのか？
* Message Content Intent固有の質問
* プライバシーポリシーはどこにあるのか？

これらを入力したら送信ボタンをぽちっと押します。

この申請リクエスト時も、Discord担当者から直接メールで質問されたりします。

そしてまた何回かやり取りすると、

:::note info
「あなたのBotが特権インテントに対して承認されました！」
:::

みたいなメールが届いて特権インテントが許可されます。

これで晴れて認証済みBotになりました！パチパチパチ！


## 最後に
認証済みBotになった事をきっかけに、下記の最低限のセキュリティー設定を行いました。

 * サーバーのrootログイン無効化
 * SSHのパスワードログイン無効化
 * SSHは公開鍵認証方式にする
 * Botトークンを流出させない
 * 不要ポートは閉じる
 * 不正アクセス防止ツール導入(fail2banなど)


ここまで読んでくださってありがとうございました！