Discord Botを作ろう!初心者でも必ず作れる完全開発ガイド

Discord

「Discord Botって難しそう…プログラミング経験ないと無理?」

「自分のサーバー専用のBotが欲しい!」

「MEE6みたいな多機能Botを作ってみたい」

そんな願望、ありませんか?

実は、Discord Bot作成は思っているより簡単なんです!

基本的なBotなら、コピペとちょっとの編集で30分もあれば動かせます。

この記事では、プログラミング初心者でもDiscord Botを作れるように、画像付きで丁寧に解説します。

Python版とJavaScript版、両方の作り方を完全網羅!

スポンサーリンク

Discord Botとは?できることを理解しよう

Botは「自動化された助手」

Discord Botを簡単に例えると:

人間の代わりに24時間働くアシスタント

できること:
- メッセージに自動返信
- コマンドで様々な機能を実行
- 新メンバーを歓迎
- 音楽を再生
- ゲームを管理
- モデレーション(荒らし対策)

人気Botでできること

MEE6(多機能Bot):

  • レベルシステム
  • 自動モデレーション
  • カスタムコマンド

Rythm(音楽Bot):

  • YouTube音楽再生
  • プレイリスト管理

自作Botなら:

  • 完全カスタマイズ可能
  • 独自機能を実装
  • 無料で使い放題

必要な準備:開発環境を整えよう

最低限必要なもの

必須:
✅ PC(Windows/Mac/Linux)
✅ Discordアカウント
✅ テキストエディタ(VSCode推奨)
✅ インターネット環境

プログラミング言語(どちらか):
✅ Python 3.8以上
✅ Node.js 16.9以上

開発環境のセットアップ

VSCodeのインストール:

  1. code.visualstudio.com からダウンロード
  2. インストール実行
  3. 日本語化拡張機能を追加

Pythonのインストール:

# Windowsの場合
1. python.org から最新版ダウンロード
2. 「Add Python to PATH」にチェック
3. インストール実行

# 確認コマンド
python --version

Node.jsのインストール:

# 公式サイトからLTS版をダウンロード
nodejs.org

# 確認コマンド
node --version
npm --version

Step 1:Discord開発者ポータルでBotを作成

アプリケーションの作成

手順:

  1. 開発者ポータルにアクセス URL: https://discord.com/developers/applications
  2. 「New Application」をクリック アプリ名:好きな名前(後で変更可) 例:MyFirstBot、TestBot
  3. 利用規約に同意して「Create」

Bot設定

Botユーザーの作成:

  1. 左メニュー「Bot」を選択
  2. 「Add Bot」をクリック 「Yes, do it!」で確認
  3. 重要な設定: 設定項目: USERNAME:Botの名前 ICON:Botのアバター画像 TOKEN:「Reset Token」→「Copy」 ⚠️ このトークンは絶対に公開しない!

権限設定(Privileged Gateway Intents)

必要な権限をON:

☑ PRESENCE INTENT(オンライン状態)
☑ SERVER MEMBERS INTENT(メンバー情報)
☑ MESSAGE CONTENT INTENT(メッセージ内容)

すべてONにして「Save Changes」

Step 2:Botをサーバーに招待

招待URLの生成

  1. 左メニュー「OAuth2」→「URL Generator」
  2. SCOPES(スコープ)を選択: ☑ bot ☑ applications.commands(スラッシュコマンド用)
  3. BOT PERMISSIONS(権限)を選択: 基本的な権限: ☑ Send Messages(メッセージ送信) ☑ Read Messages/View Channels(メッセージ読取) ☑ Embed Links(埋め込みリンク) ☑ Attach Files(ファイル添付) ☑ Read Message History(履歴読取) ☑ Add Reactions(リアクション追加) 管理系(必要に応じて): ☑ Manage Messages(メッセージ管理) ☑ Manage Roles(ロール管理) ☑ Kick Members(キック) ☑ Ban Members(BAN)
  4. 生成されたURLをコピー

サーバーへの追加

  1. URLをブラウザに貼り付け
  2. 追加先サーバーを選択
  3. 「認証」をクリック
  4. Bot がサーバーに参加!

Step 3:コーディング – Python版

必要なライブラリをインストール

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

# その他便利なライブラリ
pip install python-dotenv  # 環境変数管理
pip install aiohttp        # HTTP通信用

基本的なBotコード

bot.py:

import discord
from discord.ext import commands
import os
from dotenv import load_dotenv

# 環境変数読み込み
load_dotenv()

# Botの設定
intents = discord.Intents.default()
intents.message_content = True
intents.members = True

bot = commands.Bot(
    command_prefix='!',  # コマンドの接頭辞
    intents=intents
)

# Bot起動時のイベント
@bot.event
async def on_ready():
    print(f'{bot.user} として起動しました!')
    # ステータス設定
    await bot.change_presence(
        activity=discord.Game("!help でヘルプ")
    )

# メッセージ受信時のイベント
@bot.event
async def on_message(message):
    # Bot自身のメッセージは無視
    if message.author == bot.user:
        return
    
    # 「こんにちは」に反応
    if 'こんにちは' in message.content:
        await message.channel.send('こんにちは!👋')
    
    # コマンド処理を継続
    await bot.process_commands(message)

# pingコマンド
@bot.command(name='ping')
async def ping(ctx):
    """Botの応答速度を確認"""
    latency = round(bot.latency * 1000)
    await ctx.send(f'Pong! 🏓 応答速度: {latency}ms')

# ユーザー情報コマンド
@bot.command(name='userinfo')
async def userinfo(ctx, member: discord.Member = None):
    """ユーザー情報を表示"""
    member = member or ctx.author
    
    embed = discord.Embed(
        title=f"{member.name}の情報",
        color=member.color
    )
    embed.set_thumbnail(url=member.avatar.url)
    embed.add_field(name="ID", value=member.id)
    embed.add_field(name="ニックネーム", value=member.nick or "なし")
    embed.add_field(name="アカウント作成日", value=member.created_at.strftime("%Y/%m/%d"))
    embed.add_field(name="サーバー参加日", value=member.joined_at.strftime("%Y/%m/%d"))
    
    await ctx.send(embed=embed)

# サイコロコマンド
@bot.command(name='dice')
async def dice(ctx, sides: int = 6):
    """サイコロを振る(デフォルト6面)"""
    import random
    result = random.randint(1, sides)
    await ctx.send(f'🎲 {sides}面サイコロの結果: **{result}**')

# Bot実行
TOKEN = os.getenv('DISCORD_TOKEN')  # .envファイルから取得
bot.run(TOKEN)

環境変数ファイル(.env)

DISCORD_TOKEN=ここにBotトークンを貼り付け

Step 3:コーディング – JavaScript版

プロジェクトの初期化

# プロジェクトフォルダ作成
mkdir my-discord-bot
cd my-discord-bot

# package.json作成
npm init -y

# 必要なパッケージインストール
npm install discord.js
npm install dotenv

基本的なBotコード

index.js:

const { Client, GatewayIntentBits, EmbedBuilder } = require('discord.js');
require('dotenv').config();

// Botクライアント作成
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
        GatewayIntentBits.GuildMembers
    ]
});

// Bot起動時
client.once('ready', () => {
    console.log(`${client.user.tag} として起動しました!`);
    client.user.setActivity('!help でヘルプ', { type: 'PLAYING' });
});

// メッセージ受信時
client.on('messageCreate', async (message) => {
    // Bot自身のメッセージは無視
    if (message.author.bot) return;
    
    // こんにちはに反応
    if (message.content.includes('こんにちは')) {
        message.reply('こんにちは!👋');
    }
    
    // コマンド処理
    if (!message.content.startsWith('!')) return;
    
    const args = message.content.slice(1).trim().split(/ +/);
    const command = args.shift().toLowerCase();
    
    // pingコマンド
    if (command === 'ping') {
        const latency = Date.now() - message.createdTimestamp;
        message.reply(`Pong! 🏓 応答速度: ${latency}ms`);
    }
    
    // ユーザー情報コマンド
    if (command === 'userinfo') {
        const member = message.mentions.members.first() || message.member;
        
        const embed = new EmbedBuilder()
            .setTitle(`${member.user.username}の情報`)
            .setThumbnail(member.user.displayAvatarURL())
            .setColor(member.displayHexColor)
            .addFields(
                { name: 'ID', value: member.id, inline: true },
                { name: 'ニックネーム', value: member.nickname || 'なし', inline: true },
                { name: 'アカウント作成日', value: member.user.createdAt.toLocaleDateString('ja-JP'), inline: true },
                { name: 'サーバー参加日', value: member.joinedAt.toLocaleDateString('ja-JP'), inline: true }
            );
        
        message.reply({ embeds: [embed] });
    }
    
    // サイコロコマンド
    if (command === 'dice') {
        const sides = parseInt(args[0]) || 6;
        const result = Math.floor(Math.random() * sides) + 1;
        message.reply(`🎲 ${sides}面サイコロの結果: **${result}**`);
    }
});

// Bot起動
client.login(process.env.DISCORD_TOKEN);

package.json の設定

{
  "name": "my-discord-bot",
  "version": "1.0.0",
  "description": "My Discord Bot",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "discord.js": "^14.0.0",
    "dotenv": "^16.0.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.0"
  }
}

Step 4:Botを起動する

Python版の起動

# ターミナル/コマンドプロンプトで
python bot.py

# 成功すると表示される
MyBot#1234 として起動しました!

JavaScript版の起動

# ターミナル/コマンドプロンプトで
npm start

# または
node index.js

# 成功すると表示される
MyBot#1234 として起動しました!

便利な機能を追加しよう

自動ロール付与

Python版:

@bot.event
async def on_member_join(member):
    """新規メンバー参加時に自動でロール付与"""
    role = discord.utils.get(member.guild.roles, name="メンバー")
    if role:
        await member.add_roles(role)
    
    # ウェルカムメッセージ
    channel = discord.utils.get(member.guild.channels, name="一般")
    if channel:
        await channel.send(f"{member.mention} さん、ようこそ!🎉")

リアクションロール

JavaScript版:

// 特定のメッセージにリアクションでロール付与
client.on('messageReactionAdd', async (reaction, user) => {
    if (user.bot) return;
    
    if (reaction.emoji.name === '✅') {
        const member = reaction.message.guild.members.cache.get(user.id);
        const role = reaction.message.guild.roles.cache.find(r => r.name === '認証済み');
        if (role) {
            await member.roles.add(role);
        }
    }
});

音楽再生(基本)

# 追加ライブラリが必要
# pip install youtube_dl
# pip install PyNaCl

@bot.command(name='play')
async def play(ctx, url):
    """YouTubeの音楽を再生"""
    voice_channel = ctx.author.voice.channel
    if voice_channel:
        voice_client = await voice_channel.connect()
        # 音楽再生のロジック

Botを24時間稼働させる方法

無料ホスティングサービス

Replit(初心者向け):

メリット:
- 完全無料
- ブラウザで開発可能
- 簡単設定

デメリット:
- 5分で停止(Keep Aliveが必要)
- リソース制限あり

Railway(中級者向け):

メリット:
- $5分のクレジット付き
- GitHub連携
- 自動デプロイ

設定:
1. GitHubにコードをプッシュ
2. Railwayでプロジェクト作成
3. 環境変数設定
4. デプロイ

有料VPS(本格運用)

おすすめVPS:
- Vultr($6/月〜)
- DigitalOcean($6/月〜)
- ConoHa(630円/月〜)

メリット:
- 24時間安定稼働
- 複数Bot運用可能
- 完全なコントロール

Heroku代替

# Dockerファイル作成
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "bot.py"]

トラブルシューティング

よくあるエラーと解決法

エラー1:Token Invalid

原因:トークンが間違っている
解決:
1. トークンを再生成
2. .envファイルを確認
3. スペースや改行がないか確認

エラー2:Missing Permissions

原因:Botに権限がない
解決:
1. OAuth2で権限を追加
2. サーバーでロールを確認
3. Botを再招待

エラー3:Rate Limited

原因:API制限に到達
解決:
1. リクエスト頻度を下げる
2. キャッシュを活用
3. 適切なクールダウン実装

セキュリティのベストプラクティス

トークンの管理

# ❌ 絶対ダメ
bot.run("MTE2MjY4...")

# ✅ 環境変数を使う
import os
from dotenv import load_dotenv
load_dotenv()
bot.run(os.getenv('DISCORD_TOKEN'))

.gitignoreの設定

# 環境変数
.env

# Python
__pycache__/
*.py[cod]
venv/

# Node.js
node_modules/
npm-debug.log

まとめ:今すぐBotを作ってみよう!

Discord Bot作成は、思ったより簡単です。

重要なポイント:

  • 基本的なBotなら30分で作れる
  • Python/JavaScriptどちらでもOK
  • 無料でホスティング可能
  • セキュリティに注意(トークン管理)
  • 少しずつ機能を追加していく

次のステップ:

  1. まずは簡単なBotから始める
  2. コマンドを追加していく
  3. データベース連携を学ぶ
  4. スラッシュコマンド実装
  5. 音楽再生やゲーム機能

プログラミング初心者でも、コピペから始めて徐々に理解を深めていけば、必ず自分だけのBotが作れます。

さあ、今すぐあなたのアイデアをBotにしてみましょう!

コメント

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