Python初心者がDiscordBotを起動する


前書き

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

動作環境

Python 3.7.0
pip 20.1
discord.py 1.3.1

まず最初に

Discordをインストールしていない場合は下記リンクからインストールしてください。(ブラウザ版でも大丈夫です)
Discordインストール

Pythonの開発環境を用意しましょう。これがないと何もできませんからね。
こちらを参考にして開発環境を整えてください。
Pythonの開発環境を用意しよう!

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

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

Discordサーバーの作り方

画面左端に丸い「+」のマークがあります。

これを押すと

こんな画面が出てくるので「サーバーを作成」をクリックします。
その後サーバーの名前をつけてください。下にあるサーバー地域はJapanのままで大丈夫です。
これでDiscordサーバーの作成は完了です!簡単だね!

Botアカウント作成

Discord Developer Portal でBotアカウントの作成ができます。

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

その後画面の左側にあるSETTINGSからBotをクリックします。

右側にあるAdd BotをクリックしてYes, do it!をクリック。

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

※注意!このTokenは他の人に絶対教えてはいけません

最後に左側のSETTINGSからOAuth2をクリックします。

下にスライドしていくとOAuth2 URL Generatorの下にたくさんのチェックボックスがあると思います。
このチェックボックスからbotだけチェックを入れて、下に表示されているURLをコピーします。

コピーしたURLをそのままGoogleの検索欄にペーストして検索しましょう。
そのURLに移動すると、下の画像のような画面が表示されます。

「サーバーを選択」と書いてあるプルダウンをクリックして、自分のサーバーを選んで認証をクリックします。そうすると、選択したサーバーにBotが追加されます。

プログラムの作成と起動

いよいよPythonを使ってBotを動かしていきます。
まずdiscord.py をインストールしていきます。

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

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

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を起動します
(下の文を一行づつコピペしてターミナルに打ち込んでください)

Botの起動
$ cd Documents
$ python3 discordbot.py

Botが参加しているDiscordのサーバーのテキストチャンネルで
/dogと送信するとワンッ!と返信するBotができます。

発展

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

参考にした記事

Pythonで実用Discord Bot(discordpy解説)
Webサービスを利用して天気情報を取得する by Python
【discord Bot開発】pythonが色々簡単すぎるので、爆速で天気予報Botをデプロイしたよ!
Pythonエラー一覧(日本語)