- [discord.py] Discord botの作り方 ユーザ作成からコーディング・動作確認までの手順を紹介
- [discord.py] Discord botユーザを作成し、トークンを取得する手順
- [discord.py] 2019年最新版!discord botの環境構築~実行まで(Win/Mac/Linux)
- [discord.py] 動かないとき、エラーがでたときの解決策
今回は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] Discord botの作り方 ユーザ作成からコーディング・動作確認までの手順を紹介
- [discord.py] Discord botユーザを作成し、トークンを取得する手順
- [discord.py] 2019年最新版!discord botの環境構築~実行まで(Win/Mac/Linux)
- [discord.py] 動かないとき、エラーがでたときの解決策