discord botを作成する流れ

# 初めに

この記事では，discord.pyを利用したdiscord botの作成の流れをします．
ただ，discord.pyは[Python 3.8 以降で動作する](https://discordpy.readthedocs.io/ja/latest/intro.html#prerequisites)そうなので，そこだけ注意してください．

# discord botアカウントの作成

discord botを作るには，そのアカウントが必要です．そのためアカウントを作成します．
英語が読めるなら，[公式ドキュメント](https://discord.com/developers/docs/getting-started)を読むのが一番ですが，discord botについての日本語記事はいっぱいあるので適当に探してください．自分が参考にしたものは，「[Discord Botアカウント初期設定ガイド for Developer](https://qiita.com/1ntegrale9/items/cb285053f2fa5d0cccdf)」という記事です．

botを作成するとアクセストークンを入手できるようになると思います．忘れるとトークンを再生成しないといけなくなります．当然の話ではありますが，もし再生成した場合，再生成以前のトークンは使えなくなるので注意してください．その対策として環境変数にトークンを入れておきましょう．

## 環境変数への設定
botのトークンをOSに環境変数として設定しておきましょう．(環境変数の設定は[私が書いた記事](https://qiita.com/halglobe0108/items/735433531e7b17a20b54)があるので読んでいただけると喜びの舞を捧げます．~~ちなみに結論だけ知りたいなら別の記事を読んだ方がいいです~~)

ただ，わざわざOSに設定しなくてもPythonなら，`.env`ファイルに環境変数を記述し`python-dotenv`を利用した設定もあります．おそらくこちらの方が取り回しが良いと思います．
`python-dotenv`については，「[python-dotenvを使って環境変数を設定する](https://qiita.com/harukikaneko/items/b004048f8d1eca44cba9)」，「[.env ファイルで環境変数を設定する (python-dotenv)](https://maku77.github.io/python/env/dotenv.html)」といった記事を参考にすると良いと思います．

## 環境変数の取得

pythonにおいて環境変数の値を取得するには`os.getenv`を利用します．`os.environ`でも取得できるそうですが，細かい話は「[Pythonで環境変数を活用する](https://www.twilio.com/blog/environment-variables-python-jp)」という記事が参考になると思いますのでそちらを見てください．

というわけで，試しに`.env`と`python-dotenv`を使った環境変数について試してみましょう

## 環境変数の実験

```text: ファイル構成
.
├── .env
└── envtest.py
```

```python: .env
QIITA=qiita
RAM="sheep meat"
```

```python: envtest.py
import os
from dotenv import load_dotenv
load_dotenv()

print(os.getenv("QIITA"))
print(os.environ.get("RAM"))
```

このようにファイルを用意して，実行してみます．

```bash: bash
$ python3 envtest.py 
qiita
sheep meat
```

大丈夫そうですね．同じようにしてbotのトークンも設定しておきましょう．

# discord.pyのインストール

続いて，discord.pyのインストールをしましょう．[GitHubのREADME](https://github.com/Rapptz/discord.py)だったり，[discord.pyのドキュメント](https://discordpy.readthedocs.io/ja/latest/intro.html#introduction)にインストールの方法が書いてあるのでその通りにインストールすれば大丈夫です．

discord.pyのインストールができたら，ようやくbotを動かしましょう．

# botを動かす

まずはbotのアカウントを自分のサーバーに招待しておきましょう．アカウント作成したときに[参考にした記事](https://qiita.com/1ntegrale9/items/cb285053f2fa5d0cccdf#%E8%AA%8D%E8%A8%BCurl%E3%81%A7%E6%A8%A9%E9%99%90%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B)に招待の方法がありますのでそちらを見てください．
招待してbotがサーバーに入ったのを確認したらコードを書いていきます．とりあえずで動かすだけなら[公式ドキュメントのクイックスタート](https://discordpy.readthedocs.io/ja/latest/quickstart.html)をそのまま持ってくるのが早いと思います．

botアカウントにログインさせるだけなら以下の通りです．

```python: discordbot.py
import os
import discord
from dotenv import load_dotenv
load_dotenv()


intents = discord.Intents.default()
client = discord.Client(intents=intents)
client.run(os.getenv("TOKEN"))
```

これで動かすと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953650/7437ea64-a7e7-1528-312d-293b281df87a.png)

こんな感じでログインしてくれると思います．

[intents](https://discordpy.readthedocs.io/ja/latest/api.html#intents)は，
> Permissions と同様に、提供されるプロパティは双方向で利用できます。通常の真偽値であるかのように、 プロパティを使用し個々のビットを設定したり取得したりできます。

とあります．要するにbotに何をさせるか，させないかの権限みたいですね．基本的に`discord.Intents.default()`で基本的なものはONにさせとくのが楽だと思います． ただし，`message_content`など一部のものは個別で指定する必要があり，また，[developer portal](https://discord.com/developers/applications)でそのbotのBOT項目Privileged Gateway IntentsにおいてもONに設定する必要があります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953650/f155a65b-a18d-c223-1240-1e6ee3532c2b.png)

あとはひたすらにコーディングしたり，[APIリファレンス](https://discordpy.readthedocs.io/ja/latest/index.html)とにらめっこしたり，「こういうのしたいんだけどどうしたらいいんだろう」っていうのを検索したり，エラーと格闘したり，[APIリファレンス](https://discordpy.readthedocs.io/ja/latest/index.html)とにらめっこしたりしてbotを作っていきましょう．

以上がdiscord botの作成までの流れとなります．
お疲れ様でした．