[discord.py] 2019年最新版!インストール方法と簡単なコードサンプル rewrite対応

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

今回はコードを触って、Botを動かすところまで行ってみましょう。
Discord Bot Userの作成、トークンの取得がまだの方は、シリーズのひとつ前の記事からお読み下さい。

この記事を読む前に

この記事では、簡単なDiscord Botを作成する手順を説明しています。
が、前提として、UbuntuOS上のbash、またはその他のPOSIX互換なコマンドライン環境があることを想定しています。
この環境がない場合、まず何らかの方法でこの環境を用意する必要があります。
こちらの記事にて詳細を紹介していますので、お読み下さい。

環境構築

開発用フォルダ作成

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

コーディング

さっそくですが、コードを書いていきましょう。エディタはなんでもいいですが、文字コードはUTF8にするようにしましょう。ファイル名はbot.pyにします。
トークンの取得がまだの場合、こちらから取得してください。

コード全体

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

bot = commands.Bot(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'という文字列を記述しています。

動作確認

起動する

下記コマンドを実行します。

(venv) $ python bot.py

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

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

おつかれさまでした。

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