Edited at

Pythonで簡単なDiscord Botの作り方

追記 2019/1/23 Discordのページの仕様が変わっていたため内容を少し変更しました。

追記 2019/5/11 discord.pyの使い方が多少変更されていたため、本記事に書かれているコードを新しいものに修正しました。@1ntegrale9さん報告ありがとうございます。


今回作るもの

Discordで 「おはよう」 と入力すると 「おはようございます、"ユーザー名"さん!」 と返事をする簡単なBotを作ります。後から反応する言葉を変えたりできます。

ほとんど公式Githubにあるクイックスタートと同じ内容です。


Discordとは

最近はやってるゲーマー用のチャットアプリです。Slackと少し似ていてボットが開発しやすい環境となっています。


あらかじめやっておくこと



  • Python3の環境を作る

  • Pythonを書くテキストエディタを入れていく


discord.pyのダウンロード

discord.pyをpipを使ってインストールします。

python3 -m pip install -U discord.py


Bot用のトークンを手に入れる

DiscordのDeveloperのサイトに行って新しいBotを登録します

まずApplicationsCreate an Applicationをクリックします。

次にNAMEに自分のボットの名前を書き、Createをクリックします。

New App Picture

左側にあるBotの欄に行きAdd BotをクリックしてYes, do it!

Create a bot User Picture

Yes do it

また同じページのTOKENの欄に行ってClick to Reveal Tokenをクリックし、Token確認します (これを後で使います)

reveal token

最後に左側にあるOAuth2の欄に行きます。

OAuth2 URL GRNERATORの下にたくさんのチェックボックスがあると思うので、 Bot だけがチェックされた状態で、下に表示されているURLをコピーします。

スクリーンショット 2019-01-23 15.12.09.png

コピーしたURLに行くと、次のような画面が出てきます。

スクリーンショット 2019-01-23 15.14.17.png

自分のサーバーを選んで追加します。


Botを書く

実際に書いていきましょう

まずはdiscord.pyのパッケージをインポートします

import discord

client = discord.Client()

次にBotがログインし準備が完了した時の処理を書きます

(コピペでもいいと思います)

@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("おはよう"):
# 送り主がBotだった場合反応したくないので
if client.user != message.author:
# メッセージを書きます
m = "おはようございます" + message.author.name + "さん!"
# メッセージが送られてきたチャンネルへメッセージを送ります
await message.channel.send(m)

最後にBotをスタートします

# token にDiscordのデベロッパサイトで取得したトークンを入れてください

client.run("token")

全体のコードをまとめて書くと


main.py

import discord

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("おはよう"):
# 送り主がBotだった場合反応したくないので
if client.user != message.author:
# メッセージを書きます
m = "おはようございます" + message.author.name + "さん!"
# メッセージが送られてきたチャンネルへメッセージを送ります
await message.channel.send(m)

client.run("token")



実行してみよう

保存したファイルを実行してみましょう

$ python main.py

Logged in as
ユーザー名
ID
------

これが出力されれば正常に実行できていますです。

最後にDiscordに行ってBotのいるグループで「おはよう」と打つと返事が帰ってくるはずです!


最後に

反応する言葉や返事は簡単に変えられますが他の処理をいれようとした時はasyncになっていることを考慮してやってみてください。


参考

discord.pyの公式Github