PythonでDiscordBotを作ろう

PythonでDiscordBotを作ろう
Photo by Alexander Shatov / Unsplash

Discord使ってますか?結構流行ってますよね?(知らんけど サーバーを建てれば自分だけの島が完成するし、他のサーバーに入っていろんな人と交流するのも楽しいですよね^^;

Discordは、コミュニケーションツールの中でも比較的オープンなツールです。なので、自作もしくは誰かが作ったBotを簡単に導入することができます。以下のようなサイトでは、作ったBotをホスティングしています。このサイトのように世界中の有志が、さらにDiscordを使いやすくしてくれています。

サーバーにBotを入れる際は自己責任でお願いします。
Discord Bots
The original Discord bot list, find the right bot for your server today.

しかし、該当のサーバーのニーズを100%満たせる物を探すのは一苦労です。また、それがうまく合致するかは微妙です。なので、今回は自作してみようの第一弾です。(第一弾で終わる可能性も有)


1. DevelopperポータルからBotに必要な情報を集めよう

  1. Discord Developpers Portalにログインする。※アカウントがない場合は事前に作成してください。
Discord Developer Portal — API Docs for Bots and Developers
Integrate your service with Discord — whether it’s a bot or a game or whatever your wildest imagination can come up with.

2. アプリケーションを作成

①右上の「New Application」をクリックする

②アプリケーションの名前を入力

③「Bot」をクリック

④「Add Bot」をクリック

⑤「Yes, do it!」をクリック

⚠️
「Too many users have this username, please try another.」と表示される場合は、アプリケーションの名前が多くのユーザに使われているとのことなので、General InformationのNameを変更してください。

⑥ 「Reset Token」をクリック

⑦ 「Token」をコピーする


2. PythonでBotを作る

Botのトークンが取得できたら、あとはこちらのものです!サクッと特定の文字が入力された時に反応するBotを作成しましょう!

  1. 初めにpipでDiscordのBotを作るためのライブラリをインストールしておきます。
sudo pip3 install discord

2. Botを作っていく



#!/usr/bin/env python3
import discord

tk = "NjQ....." # 1-⑦で入手したトークンを貼り付ける

client = discord.Client()

@client.event
async def on_ready():
    print("Bot準備完了!")


@client.event
async def on_message(message):
    if message.author.bot:
        return

	# 「おはよう」というメッセージに反応して「おはよう」とチャンネルに投稿する
    if message.content.startswith("おはよう"):
        channel = message.channel
        send_content = "おはよう"
        await channel.send(send_content)
	
    # 「調子はどう?」に反応して「いい感じ、あなたは?」と返して返信を待って、返信内容を表示する
    if message.content.startswith("調子はどう?"):
        channel = message.channel
        await channel.send('いい感じ、あなたは?')
        def check(m):
            return len(m.content) != 0 and m.channel == channel

        msg = await client.wait_for('message', check=check)
        
        send_content = msg.content
        await channel.send(send_content)

client.run(tk)
testBot.py

コマンドではなく、サクッと作りたかったのでメッセージの始まりを監視するようにしました。

③ 動かす

python3 testBot.py
⚠️
bot.pyやdiscord.pyという名前だと、ライブラリの中に入っているファイルと競合してうまく動かない可能性があるので、できるだけ具体的な名称にすることをお勧めします。

これだけだと、コマンドラインで動かしている時だけしか動きません。これが何を意味するかというと、これを実行しているコンピューターの電源が切れるとBotも止まってしまいます。

もし、VPSやクラウド、RaspberryPiなど24時間電源が投入されているコンピューターを操作できる環境であれば、以前書いた記事に常駐化して動かす方法を書いていますので、そちらをご覧ください。

Pythonをデーモン化して動かす
自作したPythonスクリプトを常駐化して動かしたいことありませんか?DiscordのBotとか、室温計測のスクリプトとか...そんな時はデーモン化して、裏で働いてもらいましょう!ついでに再起動しても勝手に動作するように設定しておきます。 1. 環境 * RaspberryPi ZERO WH 2. 導入 1. デーモン化したいPythonファイルを適切なディレクトリ(今回は/opt/)に移動 sudo cp test.py /opt/ #!/usr/bin/env python3print(“Hello”) 2. systemdの設定ファイルを作成 sudo…

3. Botをサーバーに招待する

2でうまく動いていることを確認したら、早速Discordのサーバーに作成したBotを招待しましょう!

  1. 「AUTHORIZATION METHOD」を「In-app AUTHORIZATION」にセット

2. 「Scope」を「Bot」にセット

3. 作成したBotに必要な権限を設定 ※今回はチャットに投稿するのでテキスト周りの権限を適当に追加

4. 「Save  Changes」で設定内容を保存

5. URL GeneratorでURLを生成

6. botを選択

7. 一番下の作成されたURLを「copy」する ※パーミッションは特に選択しなくてもOK

8. コピーしたURLをブラウザに貼り付ける

9. Botを入れたいサーバーを選択する

10. Authorizeをクリックして完了

これで完了です!


今回は、画像多めで説明してきました。ですが、画像というのは儚いものです。Discord側の細かいアップデートで少し文言やボタンの位置が違うかもしれません。。。皆様も良きDiscordライフを!