「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の公式開発者ポータルから作成します。
手順
- Discord Developer Portal にアクセスし、Discordアカウントでログインする
- 右上の「New Application」ボタンをクリックし、アプリ名を入力して作成
- 左メニューの「Bot」タブを開き、「Add Bot」をクリック
- 「Token」の「Reset Token」をクリックし、Botトークンをコピー(このトークンは絶対に公開しないこと!)
- 「MESSAGE CONTENT INTENT」をONにする(メッセージを読み取るために必要)
BotをサーバーへInvite(招待)する
- 左メニュー「OAuth2」→「URL Generator」を開く
- ScopesにBotを選択する。Permissions に送信に必要な「Send Messages」「Read Message History」などをチェックする
- 生成された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.py の commands 拡張を使うと、コマンドをすっきり管理できます。
サンプルコード:コマンド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.pyのcommands.Botを使うとコマンド管理が簡単 - ✅ トークンは環境変数で管理し、コードに直書きしない
- ✅ VPSに
systemdサービスとして登録することで24時間稼働が可能 - ✅
journalctlでログを確認しながらトラブルシュートできる
Botはこのサンプルをベースにどんどんカスタマイズできます。音楽再生・翻訳・ChatGPT連携など、アイデア次第で無限に拡張可能です。ぜひ自分だけのオリジナルBotを作ってみてください!



コメント