Discord Botを作ってみる。

PythonでDiscord Botを気まぐれで作ったので手順でも紹介してみようと思います。
![computer_jinkou_chinou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391233/8a465c09-d0cd-7884-6596-96c96a65456b.png)

#環境作り

- Python3.7.6 (Anaconda)
- エディタはVScodeを使います(Pycharm?知らんねぇ..)

#discord.pyをダウンロードする
Pythonの開発環境にpipでdiscord.pyをインストールします。

```
python3 -m pip install -U discord.py
```

#DEVELOPER PORTALでBotを登録
[DEVELOPER PORTAL](https://discordapp.com/developers/applications)にアクセスしてBotを登録します。<b>NewApplication</b>をクリックし、Botの名前を決めましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391233/53391dbe-1443-556b-70e0-bf70f7f1055a.png)
メニューからBotを選択し、Build-A-Botの<b>Add Bot</b>をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391233/55eff6c6-901f-895e-25da-3ce965729daa.png)
この画面になったらBotの名前やアイコンを好きなものに変えておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391233/36ffcc12-5b25-be13-3e2c-0620b2ddc17f.png)
#Tokenを取得する
<b>Click to Reveal Token</b>をクリックしTokenをコピーしておきます。(Tokenは<b>他の人に教えないようにしましょう(乗っ取られます)</b>)
#Botをサーバーに参加させる。
Botをサーバーに入れないと話になりません。
Botをサーバーに入れるにはメニューのOAuth2からチェックボックスの<b>Bot</b>を選択、下に現れるリンクにアクセスしてBotを参加させます。
(Botの使用用途に応じてパーミッションの設定をしておくといいと思います。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391233/2182f42e-7c30-206e-e8ee-eb30a24e6660.png)
#Botのプログラムを書く
適当にPythonファイルを作り開きます。

pipでインストールしたDiscord.pyをインポートします。

```Python
import discord #Discord.pyをインポート

TOKEN = "YOUR TOKEN" #Tokenはここに書きます。
client = discord.Client()
```

Botがオンラインになり準備ができた場合にメッセージを送信する処理を書きます。

```python
@client.event
async def on_ready(): #Botが準備完了した場合
   print("Botがログインしました")
   ChannelID = int(0000000000000) #送信するチャンネルIDを書く
   channel = client.get_channel(ChannelID)
   await channel.send("私が参ったぞ！")
```

特定の文字列で返事をするコードを書きます。

```python
@client.event
async def on_message(message)
   if message.author.bot: #Botだった場合は反応しない
        return
   if message.content == "/hello": #/helloが送られた場合
        print("/helloが実行されました。")
        await message.channel.send("こんにちは！")
```

Botを開始させるコードを書きます。

```python
client.run(TOKEN)
```

###on_ready()やon_message()以外にも..
on_ready()やon_message()以外にも以下のイベントハンドラがあります。

※必ず```@client.event```、```async def```を書いてください。

```python
@client.event
async def on_member_join(member): #新規ユーザー参加時
  #処理
```

```python
@client.event
async def discord.on_voice_state_update(member, before, after): #メンーのボイスチャンネル出入り時
  #処理
```

```python
@client.event
async def on_reaction_add(reaction, user): #リアクションが追加された時
  #処理
```

#コード記述例

```python:Discord_Bot.py
import discord #Discord.pyをインポート

TOKEN = "YOUR TOKEN" #Tokenはここに書きます。
client = discord.Client()

@client.event
async def on_ready(): #Botが準備完了した場合
   print("Botがログインしました")
   print("----------")
   ChannelID = int(0000000000000) #送信するチャンネルIDを書く
   channel = client.get_channel(ChannelID)
   await channel.send("私が参ったぞ！")

@client.event
async def on_message(message)
   if message.author.bot: #Botだった場合は反応しない
        return
   if message.content == "/hello": #/helloが送られた場合
        print("/helloが実行されました。")
        await message.channel.send("こんにちは！")
@client.event
async def on_member_join(member): #新規ユーザー参加時
        print("新規ユーザー参加")
        await message.channel.send("ようこそ！")
@client.event
async def discord.on_voice_state_update(member, before, after): #メンーのボイスチャンネル出入り時
        print("ボイスチャンネル更新")
        await message.channel.send("ボイスチャンネルに動きが...")
@client.event
async def on_reaction_add(reaction, user): #リアクションが追加された時
        print("リアクション")
        await message.channel.send("リアクションしてくれた！")

client.run(TOKEN)
```

#Botを動かしてみる
Ctrl+Sで保存し、実行してみましょう。

```
$ python Discord_Bot.py
Botがログインしました
----------
```
 
こんな表示が出れば成功です。
あとは自分の好きな機能を加えてみるといいと思います。

#まとめ
Discord Botはdiscord.pyという便利なライブラリがあるので簡単に作ることができます。皆さんも是非挑戦してみてください(^▽^)/

#引用

- [discord.pyドキュメント](https://discordpy.readthedocs.io/ja/latest/)
- [discord.py Github](https://github.com/Rapptz/discord.py)