【2025年版】ChatGPT × Discordで雑談Botを作ってみた

未分類

はじめに

最近「ChatGPTをDiscordに組み込んでBotを作る」っていう話をよく聞くようになりました。
彼女と最近Discodeでやり取りを始めた僕は、ふとした瞬間に「なんでも相談できるBotがサーバーにいたら面白そうじゃない?」と思い立ち、今回の開発をスタート。彼女にAIを身近に感じてもらおう作戦です。

目指すのは超シンプル:

✅ Discordで !chat こんにちは と送ったら、ChatGPTが自然に返事してくれるBot!

……だけのはずだったんですが、めちゃくちゃエラーにぶち当たるんですよこれ。笑
Intentエラーに始まり、OpenAIの仕様変更、APIの課金などなど、いろいろ乗り越えてようやく完成しました。

本記事では、Botの作り方だけでなく、僕が実際に詰まったポイントとその解決法も含めてまるっと紹介していきます!

使用した環境・ツール

今回使った環境はめちゃくちゃシンプルです。
基本的に「Pythonでコードを書いて、Botを登録して、APIキーを用意する」だけ!


🔧 使用技術(バージョン含む)

  • Python 3.12(Windows)
  • discord.py(最新版)
  • OpenAI SDK v1.0以降(重要!)
  • .env にAPIキーとトークンを保存
  • Discord Developer Portal でBotを登録&招待

📁 ファイル構成

今回の開発に必要なのはたったこれだけ。

📁 プロジェクトフォルダ/
├─ bot.py # メインのPythonコード
└─ .env # トークン/APIキーを入れる環境変数ファイル

こんな感じ👇
(中身は後で紹介します)

💡 補足:.envの中身(例)

中にはこんな感じで書いておきます👇

DISCORD_TOKEN=xxxxxxxxxxxxxxxxxxxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx

セキュリティ的にも.envを使うのは大切ですね!

ざっくり制作ステップ

ここでは、僕がChatGPT×Discord Botを作るために行った手順をざっくり流れで紹介します。
1つずつやれば意外と難しくないので、安心してください!


Step①:環境を整える

まずは必要なライブラリをインストールします。

pip install discord.py openai python-dotenv

Step②:Discord Botを登録して招待

  1. Discord Developer Portal にアクセス
  2. 「New Application」からBotアプリを作成
  3. 左メニュー「Bot」→「Add Bot」
  4. トークンをコピーして .env に貼り付け
  5. 左メニュー「OAuth2」→「URL Generator」から「bot」権限を選んで招待URLを生成&サーバーに追加

Step③:Intentの設定(重要!)

ここ、めちゃくちゃ詰まりポイントでした。
Botがメッセージ内容を読めるようにするには、Intentという設定が必要です。

  1. Discord Developer PortalでBotの設定画面へ
  2. 「MESSAGE CONTENT INTENT」をONに!
  3. 念のため、「Presence」「Server Members」もONにしました
  4. 設定後はトークンを「Reset」して再発行!

Step④:コードを書く → 実行する

あとは bot.py を書いて、起動!

python bot.py

起動に成功すると、こんなログが出ます👇

完成したコード全文

こちらが、実際にDiscord上でChatGPTと雑談できるようになった**最終コード(bot.py)**です。
OpenAI SDKのバージョン1.0以降に完全対応済みです!

以下はそのままコピペして動く形になってます👇

bot.py
import openai
import os
import discord
from dotenv import load_dotenv

# .envファイルからAPIキーとトークンを読み込む
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

# Discord Botに必要なIntent(メッセージ取得用)
intents = discord.Intents.all()
intents.message_content = True

# Botのクライアントを作成
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f"✅ Logged in as {client.user}")

@client.event
async def on_message(message):
    # Bot自身のメッセージは無視
    if message.author.bot:
        return

    # "!chat" で始まるメッセージだけ処理
    if message.content.startswith("!chat"):
        prompt = message.content[6:].strip()
        if not prompt:
            await message.channel.send("💡 話しかけてみてね!")
            return

        await message.channel.send("ChatGPT考え中…🤖")

        try:
            # OpenAIクライアントを作成(v1.0対応)
            client_oai = openai.OpenAI(api_key=OPENAI_API_KEY)

            # ChatGPT APIにリクエストを送る(非同期じゃない!)
            response = client_oai.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "system", "content": "あなたはフレンドリーな日本語雑談AIです。"},
                    {"role": "user", "content": prompt}
                ]
            )

            # 返答を取得してDiscordに送信
            reply = response.choices[0].message.content
            await message.channel.send(reply)

        except Exception as e:
            await message.channel.send(f"⚠️ エラーが発生しました: {e}")

# Botを起動
client.run(DISCORD_TOKEN)

💡 ポイント

  • OpenAI SDK v1.0対応openai.OpenAI() を使うことが必須!
  • await をつけないclient_oai.chat.completions.create() は同期関数です
  • 環境変数 .env にAPIキー&トークンを保存することでセキュリティも安心

詰まったポイントと解決法(全部のせ)

このBotを完成させるまでに、いろんな壁にぶつかりました。
でも、1つ1つ突破できたので、同じことで困ってる人の助けになるようにエラーと解決策を共有します!


🚫 エラー①:PrivilegedIntentsRequired が出て起動しない

plaintextコピーする編集するdiscord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents...

✅ 原因

Botに「メッセージ内容を取得する権限」がない!

✅ 解決方法(2ステップ)

  1. Discord Developer Portal にログイン
  2. 対象Botの「Bot設定」→ MESSAGE CONTENT INTENT をONにする

⚠️ ONにしたら「トークンを再発行」して .env に貼り直すのも忘れずに!


🚫 エラー②:openai.ChatCompletion が使えない

plaintextコピーする編集するYou tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0...

✅ 原因

古いコード(v0.x系)の書き方を使っていた

✅ 解決方法

  • v1.0以降では openai.OpenAI() を使ってクライアントを作る
  • そして .chat.completions.create() を使う(非同期ではない!

🔁 修正前(NG):

pythonコピーする編集するawait openai.ChatCompletion.acreate(...)

✅ 修正後(OK):

pythonコピーする編集するclient_oai = openai.OpenAI(api_key=OPENAI_API_KEY)
response = client_oai.chat.completions.create(...)

🚫 エラー③:object ChatCompletion can't be used in 'await' expression

✅ 原因

OpenAI SDK v1.0では await が不要なのに付けていた

✅ 解決方法

await を外すだけでOK!


🚫 エラー④:API制限(エラー429)

plaintextコピーする編集するError code: 429 - 'You exceeded your current quota...'

✅ 原因

OpenAIの無料アカウントに「無料枠(Quota)」が付いていなかった or 使い切った

✅ 解決方法

  • Usageページ で残高確認
  • 課金(クレカ登録)して、従量課金モードにすれば即復活

動作確認と感動の瞬間

すべてのエラーを乗り越え、ついにBotを起動して Discord に向かってこう言いました:

!chat こんにちは

すると――

やったぜ☆

まとめと今後やってみたいこと

今回、思いつきから始まった「ChatGPT × Discord Bot制作」でしたが、
やってみたらめちゃくちゃ楽しかった&勉強になったというのが率直な感想です。


作ってよかったこと

  • IntentやAPIの仕組みなど、普段意識しない技術に触れられた
  • 実際に動くものができると、「作った感」が大きくてテンション上がる
  • ChatGPTが返事してくれるだけで、自分だけのAI相棒がいる感覚が生まれる

今後やってみたいこと

  • !chat じゃなく、メンションで反応するようにしたい
  • 雑談だけじゃなく、ちょっとした便利機能も追加したい(リマインダー・おみくじなど)
  • ChatGPTにキャラクター性を持たせて返信スタイルを変えるのも面白そう!
  • 会話ログを保存したり、UI付きで動かすPyQt版のGUI連携もやってみたい!
  • PC上で実行せずにRaspberry Pi上で動作させたい!

PyQtやUI制作とのつながり

実は僕、普段はPyQtでタイマーアプリなんかも作っていて、
GUI制作の面白さも感じていたんですが――
チャットBotのような「やりとり型」の開発もすごく面白い。

今後、PyQtでChatBotのUIを作ってみるのもアリだな!って思いました。

コメント

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