概要
discordのAPIラッパーdiscord.pyを使ってbotを作ってみた。ここにすでに記事があるのだが、画面キャプチャが古かったので最新版(2018年8月時点)を作ろうと思ったのがきっかけ。
本記事では触れないが似たようなラッパーでnode.js版もあるらしい。
環境
- Python 3.6.6
- discord.py
手順
Python環境の用意
何はともあれPython3系が必要。discor.py自体は3.4と3.5をサポートしていると書いてるのだが、そこに書いてある通り3.4だとQuick Exampleのコードを少し修正しないといけないので、3.5以降を使う。つもりだったのだが先に3.6.6で動作確認したので3.6.6を前提に説明します。
細かいPythonのバージョンを指定した環境構築にはpyenvとかを使うと良いと思うが、ここでは説明しない。以下の通り、何らかの手段でpython3.6の実行環境が整ったものとする。
$ python -V
Python 3.6.6
ちなみにPython3.7系では動かなかった。
botの登録
Discordのdevelopersサイトにアクセス。
Create an application
を押下
botの表示名(ここではDiscord Sample Bot)を入力して、画面右下のSave Changes
を押下
左側のメニューからbot
を選択し、右側のAdd Bot
を押下
BOTを追加するか聞かれるので迷わずYes, do it!
を押下
Click to Reveal Token
をクリックして、トークン情報を表示。このトークン情報はbotの実装時に認証情報として利用するので控えておく。もちろん後からも参照できる。
左側のメニューからOAuth2
を選択し、bot
にチェックを入れる。画面下部にbot認証用のURLが表示されるのでURLをコピーしてブラウザでアクセスする。
botを追加するサーバーを聞かれるので対象のサーバを選択する。自分が管理しているサーバでないと追加できないので注意。
認証完了。
自分のサーバにオフライン状態のbotが追加されている。
botの実装
pipでdiscord.pyをインストール。
pip install -U discord.py
Quick Exampleのソースをそのまま貼り付けたbot.py
を作成。最終行のtoken
はbot登録時に参照したトークン情報(文字列)に置き換えること。
DeveloperサイトのGeneral Information
のページにCLIENT ID
とかCLIENT SECRET
とかあるけど、それらの情報は全く必要なくて、必要なのはTOKEN
なので注意。
間違って
CLIENT SECRET
を指定して認証通らずにハマった。
import discord
import asyncio
client = discord.Client()
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.event
async def on_message(message):
if message.content.startswith('!test'):
counter = 0
tmp = await client.send_message(message.channel, 'Calculating messages...')
async for log in client.logs_from(message.channel, limit=100):
if log.author == message.author:
counter += 1
await client.edit_message(tmp, 'You have {} messages.'.format(counter))
elif message.content.startswith('!sleep'):
await asyncio.sleep(5)
await client.send_message(message.channel, 'Done sleeping')
client.run('token')
動作確認
bot.pyを実行。on_ready()
が実行される。
$ python bot.py
Logged in as
Discord Sample Bot
123456789123456789
------
Discord上のbotがオンラインになっている。
!test
とチャットに打ち込むと、自分の投稿したメッセージ数を返してくれる。
!sleep
とチャットに打ち込むと、5秒後にDone sleeping
と返してくれる。
あとはbot.py
をカスタマイズしていけば好きなbotが作れる!!簡単!!
このやり方だとpythonを立ち上げておかないとbotが応答できない。常駐させるにはレンタルサーバとか立ち上げっぱなしのサーバーが必要。