Python初心者がDiscordBotを起動する


# 前書き
初投稿のN高生です。
この記事はPythonの知識ゼロだった当記事著者がPythonの基礎知識を勉強して簡素なDiscordBotを開発する記事になっています。
ここで説明する内容は自分が参考にしたサイトを内容をほとんど真似て書いています。ご了承ください。
なお筆者自体まだ勉強中なのでこのコマンドにこんな意味があるなどわからないところが多いので大目にみてほしいです...
なお、この記事が最適解ではないと思うので、色々なサイトを調べることをお勧めします。

# 動作環境
Python 3.7.0
pip 20.1
discord.py 1.3.1

# まず最初に
Discordをインストールしていない場合は下記リンクからインストールしてください。(ブラウザ版でも大丈夫です)
[Discordインストール](https://discordapp.com/)

Pythonの開発環境を用意しましょう。これがないと何もできませんからね。
こちらを参考にして開発環境を整えてください。
[Pythonの開発環境を用意しよう！](https://prog-8.com/docs/python-env)

さて、開発環境が整いました。
「すぐにBotを作りたい！」という気持ちもわかりますが、まずは基礎を勉強しましょう。
基礎を理解していると開発がかなり楽に進みます。
**「基礎なんてどうでもいいからとりあえず動かしたい！」**って人は飛ばしてもらって大丈夫です。
僕はこちらのサイトの入門編の内容に一通り目を通しました。(1ヶ月半ほどかかりました...)
[Python学習講座 入門](https://www.python.ambitious-engineer.com/introduction-index)

さてはじめにBotのアカウントを作成しDiscordサーバーに登録しましょう。Discordサーバーをまだ作成していない人はまずは、Discordサーバーを作成しましょう。

# Discordサーバーの作り方
画面左端に丸い「+」のマークがあります。
<img width="65" alt="スクリーンショット 2020-02-10 14.51.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/e7b67518-a36e-962e-143c-b1ca6bb00e25.png">
これを押すと
<img width="481" alt="スクリーンショット 2020-02-10 14.51.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/792ca930-14f5-8adc-f7dc-9f19fe935d44.png">
こんな画面が出てくるので「サーバーを作成」をクリックします。
その後サーバーの名前をつけてください。下にあるサーバー地域はJapanのままで大丈夫です。
これでDiscordサーバーの作成は完了です！簡単だね！

# Botアカウント作成
[Discord Developer Portal](https://discordapp.com/developers/applications/) でBotアカウントの作成ができます。

サイトに飛んだらまず**Applications**で右上の**New Applications**をクリックします。
次に**NAME**で自分のBotに名前をつけて、**Create**をクリックします。

その後画面の左側にある**SETTINGS**から**Bot**をクリックします。
<img width="292" alt="discordbotsample2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/c40f3616-4179-63c0-06d0-98642c8aead1.png">


右側にある**Add Bot**をクリックして**Yes, do it!**をクリック。
<img width="870" alt="discordbotsample3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/d95efa90-e2e9-ba58-bcfd-bf96bb62fc18.png">
<img width="399" alt="discordbotsample4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/e81fc1e9-254e-932a-860c-dde97c28ca65.png">


そうすると画面中央あたりに**TOKEN**という欄があるのでそこの**Click to Reveal Token**をクリックし、**Token**を確認します。(このTokenは後で使います)

<font color="Red">**※注意！このTokenは他の人に絶対教えてはいけません**</font>
![discordbotsample5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/4accd1ee-4dce-7b1b-152c-6dc2b42cc2ca.png)

最後に左側の**SETTINGS**から**OAuth2**をクリックします。
<img width="292" alt="discordbotsample2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/3bbe0fc6-cf4a-fad2-3198-f4b2c35382db.png">
下にスライドしていくと**OAuth2 URL Generator**の下にたくさんのチェックボックスがあると思います。
このチェックボックスから**bot**だけチェックを入れて、下に表示されているURLをコピーします。
![discordbotsample6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/7c2a5d76-509e-04e6-cc9d-4e1d9c9c406c.png)

コピーしたURLをそのままGoogleの検索欄にペーストして検索しましょう。
そのURLに移動すると、下の画像のような画面が表示されます。
<img width="443" alt="discordbotsample7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/37287966-468e-6060-253e-19e41729d507.png">
「サーバーを選択」と書いてあるプルダウンをクリックして、自分のサーバーを選んで認証をクリックします。そうすると、選択したサーバーにBotが追加されます。



# プログラムの作成と起動
いよいよPythonを使ってBotを動かしていきます。
まず[discord.py](https://github.com/Rapptz/discord.py) をインストールしていきます。

```python:discord.pyのインストール
$ pip install discord.py
```

そしてこの下のコードを```discordbot.py```という名前で保存してください。
ソースコードエディタの指定は特にないので既にインストールしているもので大丈夫です。
ちなみにオススメのエディタは[Atom](https://atom.io/)です。
保存先は今回わかりやすいように「書類」(英語表記だとDocuments)に保存しましょう。

```python:discordbot.py
#インストールした discord.py を読み込む
import discord

#接続に必要(らしい)オブジェクトを生成
client = discord.Client()

# 起動時に動作する処理
@client.event
async def on_ready():
    # 起動したらターミナルにログインしたことが通知される
    print('ログインしました')

# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
    # 送り主がBotだった場合反応したくないので
    if client.user != message.author:
        # /dog と発言したら「ワンッ！」と返信する処理
        if message.content == '/dog':
            await message.channel.send('ワンッ！')

# 「TOKEN」の部分を自分で作成したBotのアクセストークンに置き換えてください
client.run("TOKEN")
```
Botを起動します
(下の文を一行づつコピペしてターミナルに打ち込んでください)

```python:Botの起動
$ cd Documents
$ python3 discordbot.py
```
Botが参加しているDiscordのサーバーのテキストチャンネルで
```/dog```と送信すると```ワンッ！```と返信するBotができます。
<img width="500" alt="discordbotsample.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549821/ec66bf68-b6c7-2a6e-bd2e-f2f951d1a68e.png">



# 発展
ここまでできればあとは作りたい機能を追加するだけです。
僕はこのあと現在時刻の取得をできるようにしたり、webスクレイピングという技術を使って天気予報を表示できるようにしたりしました。
またこのままではターミナルをつけていないとBotが使えないと思います。
そこでHerokuというホスティングサービスを利用して24時間いつでも使えるようにしました。
このあたりの実装はまだ自分の理解度だと正しい教え方ができないと思うので、他の方の記事を参考にしてやってみてください。

# 参考にした記事
[Pythonで実用Discord Bot(discordpy解説)](https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f)
[Webサービスを利用して天気情報を取得する by Python](https://qiita.com/Switch/items/955435670a852a046cd1)
[【discord Bot開発】pythonが色々簡単すぎるので、爆速で天気予報Botをデプロイしたよ！](https://qiita.com/drumath2237/items/de92bea97080891ce6c6)
[Pythonエラー一覧（日本語）](https://qiita.com/soutarrr7/items/84e529d87aa3b3a9adcb)