【実例付き】累計3万人が使うDiscordのBotを3年間運営し続けて得た知見まとめ

# 読み飛ばしてください
おはようございます、しなもんです。
プログラムコードを人生で初めて書いたのがDiscordBotというくらいには、
いろんなbotを作ってきた気がします。

というわけで、DiscordのBotを3年間作り続けて得た知見をまとめようと思います。
よろしくお願いします。

:::note warn
今回の記事において、Botの構築方法などは紹介しません。
あくまでDiscordのBotを自力で構築できる程度の知識を事前に必要とするものとします。
:::

# 0. アクティブデベロッパーバッチというものを貰える
※これは知見というよりおまけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/5c372236-88c0-7c39-49ef-9412cbf0292b.png)


DiscordのBotを**所有**し、かつ**過去30日以内に一度でも使用された**場合、
アクティブデベロッパーバッチというものを申請できます。
（申請基準が非常に低いのはおそらく、開発者をコミュニティへ誘導するため？）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/d09c2b5f-37d0-ccfb-829c-a9abda3e03ff.png)

貰えるものはもらっておきましょうということで。

https://support-dev.discord.com/hc/en-us/articles/10113997751447-Active-Developer-Badge

詳細はこちらです。申請方法もこちらで紹介されています。（英語ではありますが）

# 1. 機能追加が多くバグが起こるので定期的にアプデしろ
2023/11/16の深夜0時34分、Discordによって[CinnamonWorks](https://cinnamon.works)が運営するBotのトークンをブロックされる事件が起こりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/0e0451a0-d5e6-629d-9aaf-59366dcb16cd.png)

結論から話すと、その原因は
**「スタンプ（英名: sticker）機能に起因するPycordによるバグ」**
でした。

:::note info
[Pycord](https://docs.pycord.dev/en/stable/)というのは、Discord APIのPythonラッパーです。
[Discord.py](https://discordpy.readthedocs.io/ja/latest/)や[Nextcord](https://docs.nextcord.dev/en/stable/)、また言語は異なりますが[discord.js](https://discord.js.org)などと同じ部類ですので、同じバグとは限りませんがこのような事例が起こる可能性はあり得ます。
:::

このBotで使用されているPycordのバージョンが非常に前のものだったため、このタイミングでメッセージオブジェクトにバグが生じ、大量のエラーでトークンがブロックされたというわけです。

このことで学んだ対処法はただ一つ、**ライブラリは定期的にアプデしろ**ということです。

:::note info
**追記・この事件になかなかに懲りたので別記事にしました。**

https://qiita.com/CinnamonSea2073/items/4ea9700ea92c3c6ba858

みなさんも気をつけてくださいね。
:::

別にDiscordBotに限った話ではありませんが、Dockerなどの仮想環境を用いて構築している場合、ライブラリのバージョンに気を使うことが減っていく気がします。

確かにアップデートによって推奨される関数が変更されるなどの仕様変更に見舞われましたが、
**数行の変更とトークンの停止=サービスの停止**、選択すべきは一目瞭然かと思います。

ただ一つ、Discordは**仕様追加が非常に多いプラットフォーム**です。
2023年だけで10回の大規模アップデートが行われています。
使用しているAPIのアップデートには気を付けましょう。

# 2. 公式のコミュニティサーバーは用意するべき
Botのジャンルにもよりますが、一般公開し普及させたいBotがある場合
コミュニティサーバーは早期に開設するべきです。

### ユーザーに告知がしやすくなる
アップデートやメンテナンスなど、告知をする場所が明確になります。
もし告知がされない状態であると、ユーザーからすれば
「機能が急に変わった」「Botが使えなくなった」
となり、サービスから離れる原因になりえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/33aed2e1-7a69-9945-db4f-0951e801bf95.png)


### ユーザーとのやり取りがしやすくなる
雑談チャンネルを用意すれば、使っているユーザーの声を見ることができ、
Botを試すチャンネルを用意すればBotの導入が難しくても使うことができます。
問い合わせなどの対応も迅速に行うことができます。

### クローズドな状態でベータ版テストができる
Discordは権限や公開範囲を簡単に設定することができます。
Botを普段使用しているユーザーに、ベータ版のテストを管轄内で限定的に行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/922f9d95-6ced-bddb-6b5d-9028d4a44861.png)

### 何よりモチベーションに繋がる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/64a35ec3-c190-e355-cd80-e762e1fc9cb0.png)
リアクションとかを貰えるとめちゃくちゃうれしいです。

***

以上の理由から、コミュニティサーバーは早期に用意すべきです。

# 3. やっぱりSEO対策は大事
少し他分野の話になりますが、DiscordBotにおいても**SEO対策は効果的です。**

:::note info
SEO対策とは、日本語で「検索エンジン最適化」を意味し、
要するにGoogleなどの検索エンジンで自分のサイトが埋もれないように
**検索結果の上位に持っていくための対策**です。
:::

Botの招待リンクの使用方法やアナリティクスを見るに、
ユーザーは基本的に**Google検索からBotを探しています。**

公式サイトを用意し、対策を行うことでBotを広く認知させることができる気がします。
実際、私も上位5位までに公式サイトやTwitterが入るように対策しました。

その直後から導入サーバー数が大幅に上昇しました。

詳しくは以下の記事に少し書いてあります。

https://qiita.com/CinnamonSea2073/items/b2ff39d085c7994a2e02

# 4. 出来るだけすべてのメッセージにEmbedを使え

Embedについてはこちらの記事にまとまっています。

https://qiita.com/hisuie08/items/5b63924156080694fc81

重要なのは、
・人間ではなく**Botのメッセージであることが明確**になる
・PCとスマホで**ある程度表示が揃う**（レスポンシブ対応）
・**色や画像の添付**によるブランディングが可能になる
ことです。

特に色に関してはEmbedにしかない利点だと思っており、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/9b56f772-a5bf-aef4-567a-7361630638a2.png)

エラーを表現したり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/4ef6c8ca-4b87-a0b5-c0b4-5ea2087cfd5e.png)

完了したことを示したり

また、色は送信後も編集できるので
処理中は灰色にしておき、完了後に緑色に変える
といったことも可能です。

# 終わりに
Botを長年運営してきて得た知見をまとめました。
この知見はおそらくBot以外にも様々な個人開発で生きてくると思うので
是非参考にしていただければ幸いです。

さて、私はこれから1万人ほど参加しているコミュニティサーバーの雑談チャンネルで
**「誰が一番リアクションが早かったか選手権」を主催してくる**ので失礼します。
それでは。

# おまけ
特に整備はまだできていないのですが、
**Pycordを用いたDiscordBotをDockerで爆速構築するテンプレート**
が存在するので置いておきますね。

https://github.com/CinnamonSea2073/bot-template