本文へスキップ
メニュー
テーマ

Pythonで簡易的なDiscordのBotを作成する

目次

discord.pyを使って、決まったメッセージに返事をするだけの簡単なDiscordのBotを作ります。Pythonの開発環境がまだない場合は、以下の記事を参考にしてください。

macOSにPythonの開発環境を構築する

VS Codeの拡張機能をインストール

VS CodeでPythonを書くために、以下の拡張機能を入れておきます。

Python - Visual Studio Marketplace⁠(新しいタブで開く)

Pylance - Visual Studio Marketplace⁠(新しいタブで開く)

Discord Botのセットアップ

  1. Discord Developer Portal⁠(新しいタブで開く)にアクセスし、右上の[New Application]を押して新しいアプリケーションを作成します。

    右上の[New Application]を押す

    右上の[New Application]を押す
  2. NameにBotの名前を設定し、規約とポリシーの同意にチェックを入れてから[Create]を押します。

    NameにBotの名前を入れ、同意にチェックして[Create]を押す

    NameにBotの名前を入れ、同意にチェックして[Create]を押す
  3. Botメニューから「TOKEN」セクションの[Reset Token]を押します。アカウントのパスワードを入力するとTOKENが表示されるので忘れずにメモしておきます。トークンがあれば誰でもこのBotを操作できてしまうので、他人に教えたり、GitHubなどに公開したりしないでください。

    [Reset Token]を押してトークンを発行する

    [Reset Token]を押してトークンを発行する
  4. Botメニューから「Privileged Gateway Intents」セクションの「MESSAGE CONTENT INTENT」にチェックを入れてください。Botがメッセージの本文を読むために必要な設定です。

    「MESSAGE CONTENT INTENT」をオンにする

    「MESSAGE CONTENT INTENT」をオンにする

プロジェクトを作成する

VS Codeで新規プロジェクトを作成します。今回は「discord-bot-test」というフォルダにしています。

  1. プロジェクトの依存関係を管理しやすくするために、Pythonの仮想環境を作成してアクティベートします。

    コマンドを実行するとvenvフォルダが作成されます。

    ターミナルbash · 5行
    # 仮想環境を作成python3 -m venv venv# 仮想環境をアクティベートsource venv/bin/activate
  2. Discord Botの開発に必要なdiscord.py⁠(新しいタブで開く)をインストールします。
    ターミナルbash · 2行
    # discord.py ライブラリをインストールpip install discord.py

プログラムを作成する

  1. プロジェクトのルートディレクトリに.envを作成します。

    Discord Botのセットアップ時に取得したトークンを=の右側に指定してください。

    .env.env · 1行
    DISCORD_BOT_TOKEN=あなたが取得したトークン

    Gitで管理する場合は、.envとvenvを.gitignoreに書いて、リポジトリに含めないようにします。

  2. python-dotenv⁠(新しいタブで開く)をインストールして、.envから環境変数を読み込めるようにします。
    ターミナルbash · 2行
    # python-dotenv パッケージをインストールpip install python-dotenv
  3. プロジェクトのルートディレクトリにbot.py(任意のファイル名でOK)を作成します。
  4. 以下のテストコードを記述します。
    bot.pyPython · 36行
    from dotenv import load_dotenvimport osimport discord# .envファイルから環境変数を読み込むload_dotenv()# 環境変数からトークンを取得するTOKEN = os.getenv('DISCORD_BOT_TOKEN')# 既定のインテント(特権インテント以外)を有効にしたIntentsオブジェクトを作成intents = discord.Intents.default()intents.message_content = True # メッセージの内容を受け取る(MESSAGE CONTENT INTENTが必要)# Discordのクライアントを作成client = discord.Client(intents=intents)@client.eventasync def on_ready():  print(f'{client.user}としてログインしました')@client.eventasync def on_message(message):  # Bot自身のメッセージには反応しないようにする  if message.author.bot:    return    # 'Botさん、こんにちは!'というメッセージに反応する  if message.content == 'Botさん、こんにちは!':    # メッセージ送信者の表示名を取得    user_name = message.author.display_name    # 応答するメッセージを作成    response = f'こんにちは、{user_name}さん!'    await message.channel.send(response)client.run(TOKEN)

Discordのテストサーバーを作成する

  1. Discordの左にある+アイコンをクリックします。
  2. 「オリジナルの作成」を選択します。

    「オリジナルの作成」を選択します。

    「オリジナルの作成」を選択します。
  3. とりあえずサーバーを作成したいだけなので「この質問をスキップ」を選択します。

    質問には答えずスキップします。

    質問には答えずスキップします。
  4. 任意のサーバー名を入れて「新規作成」を押します。

    サーバー名を入力します。

    サーバー名を入力します。

Botをサーバーに追加する

  1. Discord Developer Portal⁠(新しいタブで開く)にアクセスし、左のメニューから[OAuth2]タブを選択します。
  2. 「OAuth2 URL Generator」セクションにある「bot」にチェックを入れてスコープに追加します。

    SCOPESで「bot」にチェックを入れる

    SCOPESで「bot」にチェックを入れる
  3. すると下にさらに項目が出てくるので、「BOT PERMISSIONS」セクションで必要な権限にチェックを入れます。

    今回は「Read Messages/View Channels」(メッセージを読む/チャンネルを見る)と「Send Messages」(メッセージを送信する)にチェックを入れます。

    「Read Messages/View Channels」と「Send Messages」にチェックを入れる

    「Read Messages/View Channels」と「Send Messages」にチェックを入れる
  4. 最後に「GENERATED URL」セクションにURLが生成されるので、コピーしてそのURLにアクセスします。
  5. 「サーバーに追加」の項目に先ほど作成したテストサーバーが出てくるのでそれを選択して、「はい」を選択します。

    サーバーを選択して次に進みます。

    サーバーを選択して次に進みます。
  6. 次の項目もそのまま「認証」を押します。

    そのまま認証を押します。

    そのまま認証を押します。
  7. Discordを見るとサーバーにBotがやってきました。

    サーバーにBotが追加された

    サーバーにBotが追加された

動作テストをする

「Botさん、こんにちは!」と送信するとBotが「こんにちは、<ユーザー名>さん!」と返すプログラムを書いたので動作するか確認します。

  1. bot.pyを開いた状態でVS Codeの画面右上の▷を押すと、画面下部にターミナルが表示され、ファイルが実行されます。ターミナルでpython bot.pyを実行しても同じです。ターミナルに「〇〇としてログインしました」と表示されれば、Botが起動しています。
    VS Codeのエディタ右上の実行ボタン(▷)。右に分割表示と「…」メニューのアイコンが並んでいる
    右上の▷を押して実行する
  2. Discordに「Botさん、こんにちは!」と送信し、「こんにちは、<ユーザー名>さん!」と返ってくればテスト完了です。
    DiscordでBotに話しかけ、Botが返信する様子
    Botに話しかけると返事が返ってくる
補足

Botは、bot.pyを実行している間だけ動きます。ターミナルを閉じたり、Control + Cで止めたりするとオフラインになります。

参考・引用

この記事は役に立ちましたか?