Help us understand the problem. What is going on with this article?

Pythonで簡単なDiscord Botの作り方

More than 1 year has passed since last update.

追記 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした