PythonでDiscord Botを作る!VPSへのデプロイまで完全解説

Python

「Discord Botを自分で作ってみたい」「コマンドを打ったら自動で返信してくれるBotが欲しい」と思ったことはありませんか?

この記事では、Pythonを使ったDiscord Botの作り方を、環境構築からVPSへのデプロイまで、サンプルコードを交えながら丁寧に解説します。プログラミング初心者の方でも手順通りに進めれば、自分だけのBotを動かすことができます!


1. Discord Botとは?仕組みを理解しよう

Discord BotはDiscordのサーバー内で動作する自動プログラムです。メッセージの監視・自動返信・管理コマンドの実行など、さまざまな機能を持たせることができます。

Botの基本的な動作フロー

ステップ 内容
① ユーザーがメッセージを送信 DiscordサーバーのチャンネルにコマンドやメッセージをPOSTする
② DiscordがWebSocketで通知 Discord APIがBot(サーバー)にリアルタイムでイベントを送信
③ Botがイベントを処理 Pythonプログラムがメッセージを判定し、処理を実行
④ Botが返信を送信 Discord APIを通じてチャンネルに返信メッセージを投稿

2. 事前準備:必要なものを揃える

必要なもの一覧

  • Discordアカウント(無料)
  • Python 3.8以上(ローカルまたはVPS)
  • discord.py ライブラリ(Pythonのライブラリ)
  • VPS(常時稼働させる場合。例:さくらVPS、ConoHa VPS、Vultr など)
  • テスト用Discordサーバー(自分が管理者のもの)

Pythonとライブラリのインストール

まずローカル環境またはVPSで以下のコマンドを実行してください。

# Pythonのバージョン確認
python3 --version

# discord.pyのインストール
pip3 install discord.py

3. Discord Developer PortalでBotを作成する

BotはDiscordの公式開発者ポータルから作成します。

手順

  1. Discord Developer Portal にアクセスし、Discordアカウントでログインする
  2. 右上の「New Application」ボタンをクリックし、アプリ名を入力して作成
  3. 左メニューの「Bot」タブを開き、「Add Bot」をクリック
  4. Token」の「Reset Token」をクリックし、Botトークンをコピー(このトークンは絶対に公開しないこと!)
  5. MESSAGE CONTENT INTENT」をONにする(メッセージを読み取るために必要)

BotをサーバーへInvite(招待)する

  1. 左メニュー「OAuth2」→「URL Generator」を開く
  2. ScopesにBotを選択する。Permissions に送信に必要な「Send Messages」「Read Message History」などをチェックする
  3. 生成されたURLをコピーしてブラウザで開き、自分のサーバーにBotを招待する

4. ローカル環境で動かしてみよう

まず、最もシンプルなBotを作って動作を確認しましょう。

サンプルコード:起動確認Bot

# bot_hello.py
import discord

TOKEN = 'ここにBotトークンを貼り付ける'

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'{client.user} としてログインしました!')

@client.event
async def on_message(message):
    # Botが自分自身のメッセージに反応しないようにする
    if message.author == client.user:
        return

    if message.content == 'こんにちは':
        await message.channel.send('やあ!元気?')

client.run(TOKEN)

実行方法

python3 bot_hello.py

コンソールに BotName#1234 としてログインしました! と表示されれば成功です。Discordのチャンネルで「こんにちは」と送ると、Botが「やあ!元気?」と返信します。


5. コマンドに自動返信するBotを作る

次に、スラッシュコマンド風のプレフィックスコマンド(例:!hello!ping)に反応するBotを作ります。discord.pycommands 拡張を使うと、コマンドをすっきり管理できます。

サンプルコード:コマンドBot(複数コマンド対応)

# bot_commands.py
import discord
from discord.ext import commands

TOKEN = 'ここにBotトークンを貼り付ける'
PREFIX = '!'  # コマンドのプレフィックス

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix=PREFIX, intents=intents)

# ── 起動時のログ ─────────────────────────────
@bot.event
async def on_ready():
    print(f'{bot.user} として起動しました!')
    print(f'プレフィックス: {PREFIX}')

# ── !ping コマンド ────────────────────────────
@bot.command()
async def ping(ctx):
    """Botの応答速度を返す"""
    latency = round(bot.latency * 1000)
    await ctx.send(f'🏓 Pong! レイテンシ: {latency}ms')

# ── !hello コマンド ───────────────────────────
@bot.command()
async def hello(ctx):
    """挨拶を返す"""
    await ctx.send(f'こんにちは、{ctx.author.display_name} さん! 👋')

# ── !info コマンド ────────────────────────────
@bot.command()
async def info(ctx):
    """サーバー情報を返す"""
    guild = ctx.guild
    await ctx.send(
        f'📋 サーバー名: {guild.name}\n'
        f'👥 メンバー数: {guild.member_count}人\n'
        f'📅 作成日: {guild.created_at.strftime("%Y年%m月%d日")}'
    )

# ── !calc コマンド(引数あり)─────────────────
@bot.command()
async def calc(ctx, a: float, op: str, b: float):
    """簡単な計算をする。例: !calc 10 + 5"""
    if op == '+':
        result = a + b
    elif op == '-':
        result = a - b
    elif op == '*':
        result = a * b
    elif op == '/':
        if b == 0:
            await ctx.send('❌ 0で割ることはできません!')
            return
        result = a / b
    else:
        await ctx.send(f'❌ 演算子 "{op}" は対応していません(+ - * / のみ)')
        return

    await ctx.send(f'✅ {a} {op} {b} = {result}')

bot.run(TOKEN)

使えるコマンド一覧

コマンド 動作 入力例
!ping Botのレイテンシを返す !ping
!hello ユーザー名を含む挨拶を返す !hello
!info サーバー情報(名前・人数・作成日)を返す !info
!calc 四則演算の結果を返す !calc 10 + 5

6. VPS(Linux)にデプロイする

ローカルで動いたBotをVPSに移して、24時間365日稼働させましょう。

VPS環境の準備

SSHでVPSにログインし、必要なパッケージをインストールします。

# パッケージの更新
sudo apt update && sudo apt upgrade -y

# Python3 と pip をインストール
sudo apt install -y python3 python3-pip

# discord.py をインストール
pip3 install discord.py

ファイルのアップロード

ローカルからVPSにファイルを転送するには scp コマンドを使います。

# ローカルのターミナルで実行
scp bot_commands.py ユーザー名@VPSのIPアドレス:~/discord-bot/

または、VPS上で直接ファイルを作成することもできます。

# VPS上で作業ディレクトリを作成
mkdir ~/discord-bot
cd ~/discord-bot

# viエディタでファイルを作成(nanoでも可)
nano bot_commands.py
# ↑ コードを貼り付けてCtrl+X → Y → Enterで保存

トークンを環境変数で管理する(推奨)

セキュリティのため、トークンをコードに直書きするのはNGです。環境変数で管理しましょう。

# VPS上で環境変数を設定(~/.bashrc に追記)
echo 'export DISCORD_TOKEN="ここにBotトークン"' >> ~/.bashrc
source ~/.bashrc

コードのTOKEN部分を以下のように変更します。

import os
TOKEN = os.environ['DISCORD_TOKEN']

動作テスト(VPS上で手動実行)

cd ~/discord-bot
python3 bot_commands.py

Discordで動作確認できたら、Ctrl + C で一旦停止し、次のステップへ進みます。


7. Botを常時起動させる(systemd設定)

VPSにSSHしている間だけでなく、ターミナルを閉じても動き続けるようにするために systemd サービスとして登録します。

サービスファイルの作成

sudo nano /etc/systemd/system/discord-bot.service

以下の内容を貼り付けます(ユーザー名やパスは環境に合わせて変更してください)。

[Unit]
Description=Discord Bot
After=network.target

[Service]
Type=simple
User=ユーザー名
WorkingDirectory=/home/ユーザー名/discord-bot
ExecStart=/usr/bin/python3 /home/ユーザー名/discord-bot/bot_commands.py
Restart=on-failure
RestartSec=5
Environment=DISCORD_TOKEN=ここにBotトークン

[Install]
WantedBy=multi-user.target

サービスの有効化と起動

# systemdにサービスを認識させる
sudo systemctl daemon-reload

# サービスを起動
sudo systemctl start discord-bot

# OS起動時に自動起動するよう設定
sudo systemctl enable discord-bot

# 動作状況の確認
sudo systemctl status discord-bot

ログの確認方法

# リアルタイムでログを見る
sudo journalctl -u discord-bot -f

# 直近100行を見る
sudo journalctl -u discord-bot -n 100

主要コマンド早見表

操作 コマンド
起動 sudo systemctl start discord-bot
停止 sudo systemctl stop discord-bot
再起動 sudo systemctl restart discord-bot
状態確認 sudo systemctl status discord-bot
ログ確認 sudo journalctl -u discord-bot -f
自動起動ON sudo systemctl enable discord-bot
自動起動OFF sudo systemctl disable discord-bot

8. よくあるトラブルと対処法

エラー・症状 原因 対処法
discord.errors.LoginFailure Botトークンが間違っている Developer PortalでトークンをReset→再コピーして設定し直す
コマンドに反応しない MESSAGE CONTENT INTENTがOFFになっている Developer Portal → Bot → Privileged Gateway Intents → MESSAGE CONTENT INTENTをONにする
Botがサーバーに見えない 招待URLでBotを追加していない OAuth2 URL Generatorで招待URLを再生成してサーバーに追加する
ModuleNotFoundError: discord discord.pyがインストールされていない pip3 install discord.py を実行する
VPSでプロセスが勝手に終了する SSH接続が切れるとプロセスも終了する systemdサービスに登録して常時起動にする(第7章参照)
Botが二重に返信する 複数インスタンスが起動している sudo systemctl status discord-bot で確認し、重複プロセスを停止する

まとめ

この記事では、PythonによるDiscord Botの作成からVPSへのデプロイまでを解説しました。ポイントをおさらいします。

  • ✅ Discord Developer PortalでBotを作成し、トークンを取得する
  • discord.pycommands.Bot を使うとコマンド管理が簡単
  • ✅ トークンは環境変数で管理し、コードに直書きしない
  • ✅ VPSに systemd サービスとして登録することで24時間稼働が可能
  • journalctl でログを確認しながらトラブルシュートできる

Botはこのサンプルをベースにどんどんカスタマイズできます。音楽再生・翻訳・ChatGPT連携など、アイデア次第で無限に拡張可能です。ぜひ自分だけのオリジナルBotを作ってみてください!

コメント

タイトルとURLをコピーしました