PythonでDiscordのボットサンプルを作成（rewrite版）

(2019/04/09)discord.pyが正式リリースされたので一部内容を変更しました。
（※rewrite版と呼ばれていたものがdiscord.pyになりました）

#対象
PythonもDiscord Botも初めての方が対象です。

#今回作るもの
Discordで 「!眠たい」 と入力すると 「"ユーザー名"さん 寝ましょう」 と返事をする簡単なBotを作ります

※このページではrewrite版（async版を新しく書き換えたもの）でBotを作ります。
従来のasync版でBotを作りたい場合は、[Pythonで簡単なDiscord Botの作り方](https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f) を参考にしてください。

#この記事を書いた時の環境
（2019/03/06）
- Windows 10
- Pycharm （Pythonコードを書く環境）
- Python 3.7.2
- discord.py 1.0.0a （rewrite版）

#Discordとは
Discordとは、無料のゲーマー向けチャット・音声通話ツールです

#あらかじめやっておくこと
- Pythonを書くテキストエディタを入れておく

#PythonをWindowsにインストールする
[PythonをWindowsにインストールする](https://qiita.com/psychoroid/items/9930e871fb8169a91f9a) を参考にして導入してください。

#discord.pyのインストール
discord.pyをインストールします。

```
$ python3 -m pip install -U https://github.com/Rapptz/discord.py/archive/rewrite.zip
```

↓(2019/04/09)discord.pyが正式リリースされたので記述が変わりました。
（下記の方法でインストールしてください）

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

#Bot用のトークンを手に入れる
[DiscordのDeveloperのサイト](https://discordapp.com/developers/applications/me)に行って新しいBotを登録します
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/369375/d8f9d8b0-6414-0ebb-47f2-8e9b2a530f20.png)
左側の**Bot**欄を選択し**Create**を押します。
![無題5.png](https://qiita-image-store.s3.amazonaws.com/0/369375/feb48c91-b66a-42ab-fdaa-0fa5a5c2cb59.png)
次に**TOKEN**欄に行って**Copy**をクリックします。
(これを後で使いますのでメモ帳あたりにペーストしておいてください)
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/369375/1cc7452e-d599-6169-6b19-2101f778f671.png)
最後に**OAuth2**欄に行きます。
**bot**を選択し、**Copy**を押します。
![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/369375/4d12c22c-9f09-ff6b-0ece-8fad0b9628ce.png)
WWWブラウザのアドレス欄にペーストすると以下の画面が表示されます。
![無題4.png](https://qiita-image-store.s3.amazonaws.com/0/369375/7ef1dd53-adc6-bbba-742b-c6b113f4c016.png)
導入したいサーバーを選択します。

#コードを書く
1.以下のコード部分を全てコピペしてください。
2.一番下の行の”アクセストークン”にBotのトークンを貼り付けてください
3.:exclamation:UTF-8という形式で保存してください:exclamation:
4.保存してください

```python:main.py
import discord
import random  # おみくじで使用

client = discord.Client()  # 接続に使用するオブジェクト


@client.event
async def on_ready():
    """起動時に通知してくれる処理"""
    print('ログインしました')
    print(client.user.name)  # ボットの名前
    print(client.user.id)  # ボットのID
    print(discord.__version__)  # discord.pyのバージョン
    print('------')


@client.event
async def on_message(message):
    """メッセージを処理"""
    if message.author.bot:  # ボットのメッセージをハネる
        return

    if message.content == "!眠たい":
        # チャンネルへメッセージを送信
        await message.channel.send(f"{message.author.mention}さん 寝ましょう")  # f文字列（フォーマット済み文字列リテラル）

    elif message.content == "!投票":
        # リアクションアイコンを付けたい
        q = await message.channel.send("あなたは右利きですか？")
        [await q.add_reaction(i) for i in ('⭕', '❌')]  # for文の内包表記

    elif message.content == "!おみくじ":
        # Embedを使ったメッセージ送信 と ランダムで要素を選択
        embed = discord.Embed(title="おみくじ", description=f"{message.author.mention}さんの今日の運勢は！",
                              color=0x2ECC69)
        embed.set_thumbnail(url=message.author.avatar_url)
        embed.add_field(name="[運勢] ", value=random.choice(('大吉', '吉', '凶', '大凶')), inline=False)
        await message.channel.send(embed=embed)

    elif message.content == "!ダイレクトメッセージ":
        # ダイレクトメッセージ送信
        dm = await message.author.create_dm()
        await dm.send(f"{message.author.mention}さんにダイレクトメッセージ")


# botの接続と起動
# （botアカウントのアクセストークンを入れてください）
client.run("アクセストークン")
```

# 実行してみよう
保存したファイルをコマンドプロンプトで実行してみましょう

```
$ python main.py
ログインしました
ボットの名前
ボットのID
discord.pyのバージョン
------
```
これが表示されていると起動・ログインに成功しています。
最後にDiscordのBotのいるサーバーのテキストチャンネルで「!眠たい」と打つと返事が返ってきます。

#関連
PythonでDiscordボットを作る時のFAQ
https://qiita.com/Karaf/items/7d52c95c94268627b618

#参考
Pythonで簡単なDiscord Botの作り方
（私が初めてBotを導入した時に大変参考にさせていただきました）
https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f

PythonをWindowsにインストールする
https://qiita.com/psychoroid/items/9930e871fb8169a91f9a