[discord.py] 2019年最新版!discord botの環境構築~実行まで(Win/Mac/Linux)

この記事は、シリーズ「discord.pyでBotを作ろう」の一部です。( 3 / 4 )

今回はPythonを動かすための環境づくりからはじまり、コードを書いてBotを動かすところまで行ってみます。
Discord Bot Userの作成、トークンの取得がまだの方は、シリーズのひとつ前の記事からお読み下さい。

環境構築(Windows/Mac OS)

Linux、またはコマンドラインでの環境構築手順はこちらへ進んでください。

Pythonの統合開発環境として、PyCharmをインストールします。PyCharmでなくてもPythonとテキストエディタがあれば開発をはじめられます。
もしよくわからない場合、以下の手順に従ってインストールをしてください。

Pythonの開発環境がもうあるよ!という方はコーディングに進んでください。

PyCharm インストール

PyCharmの公式ダウンロードページからインストーラーをインストールします。

「Next」

インストールされる場所を確認して「Next」

あとから変更できる設定が大半なので、チェックしてもしなくても問題ありません。64bitOSをお使いなら「64-bit Launcher」にチェックを入れてもいいかもしれません。

ここは特に変更する必要はないかと思います。「Install」を押すとインストールがはじまります。

インストール中

インストール完了です。
いま再起動するかあとで再起動するかを問われた場合、「Reboot now」を選択し、再起動してください。

プロジェクト作成

インストールしたPyCharmを起動します。プライバシーポリシーが表示されますので、問題なければ「Continue」をクリックします。

「Create New Project」をクリック

プロジェクトの名前と場所を入力します。プロジェクト名は好きなものでOK。今回は「discordbot」にしてみました。

「Project Interpreter」をクリックすると、詳細が表示されます。Base Interpreterが「Python36」となっていることを確認してください。

discord.py パッケージ追加

プロジェクトが作成できたら、「File」→「Settings」で設定画面を開きます。

「Project: discordbot」→「Project Interpreter」とたどり、「+」ボタンをクリックします。

画面上部に「discord」と入力し、出てくる「discord.py」というパッケージを選択して「Install Package」ボタンを押します。インストールはバックグラウンドで行われるので、画面は閉じてしまって構いません。

ファイルの作成

プロジェクト名を右クリックし、「New」→「Python File」を選択します。

「bot.py」と入力し、「OK」をクリックします。

これで開発をはじめる準備が整いました。コーディングに進みましょう。

環境構築 (Linux・コマンドライン)

Python3.6以上をインストールしてあるものとします。

開発用フォルダ作成

Botのソースコードなどを置くためのフォルダを作成します。

$ mkdir discord_bot_sample

venv環境作成

venv環境を作成します。
うまくいかない場合など、詳細はこちらの記事を参照してください。

$ cd discord_bot_sample/
$ python3.6 -m venv venv
$ source venv/bin/activate
(venv) $

discord.py モジュールインストール

pipでdiscord.pyのモジュールをインストールします。
※ 2019年4月9日、v1.0.0が正式リリースされました。GitHubからでなく、下記コマンドで簡単にインストールできるようになっています。

(venv) $ pip install discord.py

pythonファイル作成

エディタはなんでもいいですが、文字コードはUTF8にするようにしましょう。ファイル名はbot.pyにします。
bot.pyでなくても構いませんが、discord.pyという名前は付けないようにしましょう。ライブラリの名前と衝突するためです。

(venv) $ vim bot.py

コーディング

では、コードを書いていきましょう。
トークンの取得がまだの場合、こちらから取得してください。

コード全体

# coding: utf-8
from discord.ext import commands

bot = commands.Bot(command_prefix='$')


@bot.command(name="こんにちは")
async def hello(ctx):
    await ctx.send(f"どうも、{ctx.message.author.name}さん!")


@bot.command(name="さようなら")
async def goodbye(ctx):
    await ctx.send(f"じゃあね、{ctx.message.author.name}さん!")


# 取得したトークンを「TOKEN_HERE」の部分に記入
bot.run('TOKEN_HERE')

コード解説

ひとつひとつのコードについて説明します。
プログラミング経験者向けの記述も含まれますので、「とりあえず動かしてみたい!」という方は、ここは読み飛ばして次に進んでください。

エンコード

# coding: utf-8

UTF8でエンコードしていますよ、ということをPythonインタプリタに伝えます。

必要モジュールのimport

from discord.ext import commands

Botを作るために必要な機能を、discord.pyから取り出しています。
必要なのはcommandsモジュールだけなので、discordというモジュールの、extというサブモジュールから、commandsモジュールをインポートしています。

Bot作成

bot = commands.Bot(prefix='$')

'$'というプレフィックスのBotを作成し、変数botに格納しています。
プレフィックスというのは、Botにわたすコマンドの目印のことです。
たとえば、今回のように'$'をプレフィックスに設定すると、Botは$hello$こんにちはなど、'$'で始まるメッセージを「自分へのコマンドだ!」と認識します。

こんにちはコマンド

@bot.command(name="こんにちは")
async def hello(ctx):
    await ctx.send(f"どうも、{ctx.message.author.name}さん!")

「$こんにちは」というメッセージが投稿されたときに、「どうも、(メッセージの送信者)さん!」と送信するという動作の「コマンド」をbotに追加しています。

具体的には、botの持つcommandというデコレータをhelloに適用しています。
このデコレータの対象はコルーチンである必要があるため、関数宣言の冒頭にasyncと付けています。

送信者の名前を表示する方法

ctx.message.author.name

Botは、コマンドの起動時、ctxという引数を受け取ります。
ctx.messageはコマンドが起動したトリガになったメッセージが格納されています。
このメッセージの送り主をauthorで取得し、その名前をnameで取得しています。

さようならコマンド

@bot.command(name="さようなら")
async def goodbye(ctx):
    await ctx.send(f"じゃあね、{ctx.message.author.name}さん!")

上記「hello」と同様、botにコマンドを追加している部分です。
「$さようなら」というメッセージを受け取ると、別れの挨拶をします。

Bot実行

bot.run('TOKEN_HERE')

'TOKEN_HERE'をトークンとして、discord botの動作を開始します。
トークンのかわりに、'TOKEN_HERE'という文字列を記述しています。

動作確認

あなたのサーバーにいるBotと実際に会話してみましょう。
サーバーにBotがいない場合、こちらを参考に招待してください。

PyCharm

メニューより、「Run」→「Run」を実行します。

Linux

vimを閉じて、下記コマンドを実行します。

(venv) $ python bot.py

サーバでBotと会話してみる

こんな感じで会話ができたら成功です。
うまくうごいたら、コマンドを追加してみたり、返答の内容を変更してみたりしてみてください。

おつかれさまでした。

この記事は、シリーズ「discord.pyでBotを作ろう」の一部です。( 3 / 4 )