見出し画像

【Discord】 Chat-GPTをカスタマイズして、自分たちだけのコンシェルジュBotを作ってみよう!

初めまして!「YOINOKOE PROJECT」代表のLunamikanと申します。

今回はタイトルの通りChat-GPTを活用したDiscord Botの作成と実装について解説をしたいと思います。

プログラミングの経験が無い人でもコピーアンドペーストで動くようになるべく細かく解説を入れていくつもりですので、よろしくお願いします!
(細かすぎるかもしれません…「そんなことわかってるよ!」という場合は適宜飛ばしてお読みください🙏)
なお、今回はプログラミング言語としてPython3.12を使用します。

こんな人にオススメの記事です!

  • Discord Botを作ってみたい!(未経験も可!)

  • Pythonを使用してDiscord Botを作ってみたい!

  • Chat-GPTのAPIを使ってみたい!(未経験も可!)

  • コピーアンドペーストで動くプログラムを見たい!

  • (Chat-GPTのAPIを触ったことがある方へ)OpenAPIでChat-GPTを動かす際に記憶を持たせたい!

注意事項

  • Botを動かす為のプログラム置き場が必要です。PCがあればなんとかなりますが、24時間365日動かしたい場合は、何かしらサーバーがあると良いです。

  • 環境構築(必要なプログラムのダウンロードや、Discord Developer Portalでのプロジェクトのセットアップなど)をする必要があります。なるべく画像を貼りますが、初めての方は少し根気がいるかもしれません。

  • OpenAI API(Chat-GPT)の利用には費用がかかります。初回にUS$5.00(2024年11月12日時点で約770円)の課金が必要です。(この課金で日常的に利用して数カ月程度は問題なく利用できるよう設定します。)


1. Discord Botの概要

DiscordでのBotは、
「API(Application Programming Interface)」というものを使い

「皆さんのコンピュータ(サーバー)で実行されているプログラム」から
「DiscordのBotアカウント」として
「Discordのチャット」に送る

という流れでメッセージが送られています。

つまりBotを作るためには、Discordへ「Botを利用するよ!」という登録をし、皆さんのプログラムがDiscordに紐付けなければいけません。この登録を行うにはDiscord Developer Portalを利用します。以下のURLからアクセスしてみましょう。

Discord Developer Portal↓

URLに飛ぶと英語のページが表示されたと思います。ここにはDiscordを活用したいろいろなプログラム(Botや拡張機能、アプリの開発)についての公式ドキュメントを読むことができます。お時間がある方や、Discordのアプリ(Bot)について詳しく知りたい方は是非見てみてください。

なお、Botは、Discordでは「Discord Appsの機能の一つ」という扱いです。その為、以下ではBotの設定のためのアプリケーションをセットアップしていきます。

では、今回は公式ドキュメントを飛ばしまして、早速プロジェクトのセットアップを行いましょう。

2. Discord Apps (Bot用のプロジェクト)のセットアップ

先程のDiscord Developer Portalに飛んだ後、左側のメニューから「Applications」を選択します。

Discordへのログイン画面が表示されると思いますので、皆さんのDiscordアカウントでログインしてください。
すると・・・


ジャーン!!
アプリケーションを追加する画面が表示されましたね!ここからアプリケーションを登録していくことになります。早速右上の「New Application」よりアプリを作成してみましょう!

NAME→アプリ(プロジェクト)の名前です。Botアカウントの名前は別に設定できますが、わかりやすく今回は「AI Bot」にしてみます。

チェックボックス→利用規約とデベロッパーポリシーに同意してください。

「Create」を押すと、Discordアプリケーションが作成され、アイコンや説明を設定できるページが表示されたと思います!
実はこれでアプリケーションの作成は完了です!簡単ですね!
(ここで設定できるアイコンや説明文はアプリケーション自体の為のものとなり、Botアカウントには反映されません。その為、今回は設定しなくても大丈夫です)

3. Botアカウントのセットアップ

Discordアプリケーションができたら、Botアカウントを作成してみましょう。

先程の画面から、またまた左側のメニュー→「SETTINGS」セクションに「Bot」がありますので、こちらをクリックしてください。

すると・・・


ジャーン!!
こちらがDiscord Bot用のアカウント設定ページになります!!ここでアイコンやバナー、名前を設定できる訳ですね!僕は今回このままにしておきますが、皆さんはお好きなように設定していただいて次に進みます。

Botの情報をカスタマイズできたら、下にスクロールしていき、「Privileged Gateway Intents」セクションを見つけてください。これがオフになっていると後でプログラムを起動させる際にエラーが出てしまうので以下の画像の通り3種類とも全てオンにしてください。

最後にプログラム作成時に使用するAPI Keyを今のうちに取得しておきましょう。

同じ画面で少し上に戻り、「Token」セクションを見つけます。ここからAP Key (Token)を取得できるのですが、最初はセキュリティの関係で非表示になっていますので「Reset Token」を押し、Discordアカウントのパスワードをもう一度入力し、API Keyを表示させましょう。


なお、API Keyは1度しか表示されません。必ず安全なところにメモを取るようにしてください。万が一忘れた場合は、同様の手順で再度新たなAPI Keyを取得できます。その場合は以前のAPI Keyは無効化されます。

※プログラミング初心者の方へ

API Keyとはプログラムがそのアカウントとしてアクセスすることを許可するパスワードのような物です。

つまりこれが第三者に知られてしまうと、その第三者は自分で作ったプログラムを皆さんのDiscord Botとして動かせてしまいます。その為、絶対に第三者に教えないようにしてください。

4. Botをサーバーに招待する

いよいよBotを皆さんのサーバーに招待してみましょう。

左側のメニュー→「OAuth2」を選択します。

こんな画面が表示されましたでしょうか。問題なく表示されたら、下の方にスクロールし、3つ目のセクション「OAuth2 URL Generator」を見つけます。ここでBotの招待リンクを作ることができます。


(Botの他にもここからDiscordアプリを公開する為の色々なリンクを作成できます。)

今回はBotの招待リンクを作成したいのでチェックボックスの中から「Bot」を見つけ、チェックを入れてください。


すると下に「BOT PERMISSIONS」というフィードが追加表示されていると思います。ここからBotに必要な権限を調整できます。これにより、そのリンク経由でサーバーに追加されたBotはここで設定した権限をデフォルトで保有することになります。

セキュリティの面でなるべく必要な権限のみを許可するべきなのですが、

  1. 一人一人、欲しい機能によって必要な権限が異なること

  2. 権限設定でミスをすると後々エラーを吐いて頭がとってもぱにっくになってしまうこと

  3. 今回は一般公開するというよりも身内で使用することを前提とすること

などから最強権限「Administrator」を付与しちゃいましょう。これであなたのAI Bot君は最強になりました。ヤッター!!


そのまま一番下に行くとURLが表示されているかと思います!URL右側の「Copy」よりURLをコピーし、ブラウザで開いてみてください。


上記のような画面が表示されたら、Botを追加したいサーバーを選択し、「Continue」しましょう。
すると・・・


!!!!!

無事、Botがサーバーにやってきました!

5. Botを動かすプログラムと環境について

「Discord Botの概要」セクションでお伝えした通り、

「皆さんのコンピュータ(サーバー)で実行されているプログラム」から
「DiscordのBotアカウント」として
「Discordのチャット」に送る

という流れでメッセージが送られます。

一度整理してみると、ここまで「DiscordのBotアカウント」をセットアップし完了した訳ですから、あとは「プログラムを作成し、皆さんのコンピュータ(サーバー)でプログラムを実行させ」れば良いということになりますね!

なんだか難しそうですが、この記事を見ながらやれば大丈夫です!

今回はPythonというプログラミング言語を使用し、DiscordのBotを動かすプログラムを書こうと思いますので、次とその次のセクションではまず、プログラムが動く環境を整えます。そして、セクション8からいよいよプログラムを作っていきましょう。

頑張るぞー!
オー!!

6. Python3環境構築

【お詫び】
環境構築について事細かに解説を書こうと思っていたのですが、まず皆さんのPCでプログラムを動かすのか、サーバーでプログラムを動かすのかによってもやることが変わること、そしてPCでもWindows/Macによっても設定が違うことなどから全ての環境を網羅する記事を書くことは無理だと判明しました。。。
すみません。。。

簡易的にいくつかのコンピュータ向けに書きますが、もしトラブルがあったり、わからない部分があったりした際は、ご自身で調べていただくようお願いします。

A. Windows PCで動かしたい!

WindowsにPythonをインストールする方法は何種類かありますが、今回は一番簡単な方法、Microsoft Store経由でインストールする方法をお伝えしたいと思います。

Microtoft Storeアプリを開き「Python」と検索していただくか以下のリンクを押していただくとPythonのバージョンがいくつか表示されると思います。

こちらに表示されたものから一番新しいものを選んでいただいてダウンロードしてください。
それだけでもうPythonが使えるようになっています。実際に使えるかどうかは、Windowsボタンを右クリック後、「ターミナル」を選択し開き、以下の「C:\>」に続くコマンドを入力します。

C:\> Python3 --version

Python 3.12.0
など、インストールしたバージョンのPythonが表示されていれば成功です。

次のセクション7へGO!!

B. Mac PCで動かしたい!

今回は、Pythonだけでなくあらゆるプログラミング言語のインストールやアンインストールが簡単になるよう、Homebrewというパッケージ管理システムを使います。これを使うことで、毎回ホームページからプログラムをダウンロードしてきてインストールしたり、Finderを漁ってアンインストールしたりせず、ターミナルにコマンドを1, 2行入力するだけでインストールやアンインストールができるようになります。
(既に他のパッケージ管理システムをご利用中の方はそちらを使ってPython3をインストールする方法をお調べください。)

Macではターミナルを使用してPythonをインストールしますので、ターミナルを開いてください。

開けましたら、以下のURLに飛び、一番上「インストール」と書かれたところのコマンドをコピーアンドペーストでターミナルに打ち込みます。
(コマンドのバージョン部分がその時の最新バージョンによって変動する為、必ず以下の公式サイトからコピーするようにしてください。)

Returnを押して実行すると、途中で英語の質問がされるかもしれません。その際は最後の1行を読んでいただき、Returnを押すかyを打ち込むかをお願いします。

Homebrewのインストールが終わったら、次はいよいよPythonのインストールです。ターミナルで以下の「%」に続くコマンドを打ち込んでください。
(以下のコマンドは現在のHomebrewでインストールできる最新バージョンを取得するコマンドです。バージョンを指定したい場合は「brew install python3.12」のようにバージョンを指定してください。)

% brew install python3

これでHomebrewを経由しPythonのインストールが始まります。こちらも途中で英語の質問がされた際は、最後の1行を読んでいただき、Returnを押すかyを打ち込むかをお願いします。

インストールが完了したら以下のコマンドを打ち込んでみましょう。

% python3 --version

結果として
Python3.12.0
など、インストールしたバージョンのPythonが表示されていれば成功です。

次のセクション7へ行きましょう!!

C. Linuxサーバーで動かしたい!

Linuxサーバーで動かしたいと思われているみなさんはある程度の知識のある方だと(勝手に)思っているのでそのつもりでお話させていただきます。

環境構築と言いましたが要するに「Python3が動く環境にしてほしい」ということです。「もう動くよ!!」という方は今すぐ次のセクション(7)へ!!

そうでない方はDebian系かRed Hat系かによってコマンドラインへ以下のコマンドをご入力ください。

これらのプログラムはroot権限をお持ちの前提です。レンタルサーバーを使ってる方は「{レンタルサーバー名} Python3」などで調べてください。また、コマンドラインへの接続方法は、お使いのサーバーサービスのQ&Aをご確認いただくか、サーバー管理者へ問い合わせていただくようお願いします。

ちなみにヨイノコエでは本記事執筆時点でAlma Linux9.3を使用中です。

Linux(Debian系: Ubuntuなど)

# sudo apt update
# sudo apt install python3

これらのコマンドで取得できるpythonバージョンはaptに依存します。バージョンを指定したインストールは、各自で調べるようお願いします…


Linux(Red Hat系: Cent OS/Alma Linux/Rocky Linuxなど)

# sudo dnf update
# sudo dnf install python3

これらのコマンドで取得できるpythonバージョンはdnfに依存します。バージョンを指定したインストールは、各自で調べるようお願いします…

なお、Pythonのバージョンが複数インストールされている場合、「python3 〜」や「pip 〜」のコマンドに使用されるPythonバージョンが古い方になっている場合があります。

$ python3 --version

コマンドにて使用されているバージョンを確認した上で、変更したい場合は、各自お調べください…

簡単に言うとpython3コマンドはだいたい「/usr/bin」フォルダ内のpython3というショートカットを指しています。

そしてこれが、古いバージョンのショートカットになってるということなので、一回このショートカットを消しちゃって、新しく高いバージョンのpython3のショートカットをそこに置いてやれば良いです。

ちなみに本当にpython3がそのショートカットを指しているかは以下のコマンドで調べられます。

$ which python3

7. Bot構築に必要なPython3のライブラリをインストールする

本セクションでは今回のBotで使用するPython3のライブラリをインストールしていきます。

※プログラミング初心者の方へ

ライブラリとは何かを軽く説明すると、プログラミング言語の「拡張機能のようなもの」とイメージしていただけると分かりやすいかと思います。
(正確にはライブラリがなくてもPythonを完璧に使いこなせれば何でもできます。ただし、その為には機能を実装する膨大なコードを書かないといけなくなります。これではあまりに時間がかかってしまいますし、開発の難易度が爆上がりしてしまいます。そこで、優しい方々が「よく使われる機能」を先に書いておいてライブラリとして公開してくれているわけです。これによって僕達はライブラリをインストールし、呼び出すだけで簡単に色々な機能を実行できるようになっているんですね。)

Pythonを使うことで計算やその値の出力など、基本的なことができますが、ライブラリを使うことによって、簡単に計算結果をExcelファイルに書き出したり、PCソフトを作ったり…
そんなことができるようになるのです!

今回は以下のライブラリをインストールします。

  1. Discord Botの機能をPython3で書く為の「discord.py」

  2. OpenAI APIを実行するための「openai」

なお、Pythonには標準でpipというライブラリ管理システムがあります。
(Macの方は先程使ったHomebrewのPythonライブラリに特化した版だと思ってください。)
その為、一つずつのインストールは一瞬です。


一番大変(個人的な意見)なPython3環境構築が終わった皆さんには何も怖いことはありませんので安心してくださいね!
では、各自のコマンドライン(ターミナルなど)で以下の「$」に続くコマンドをコピペして進んでください。

1.discord.pyのインストール

$ pip install -U discord.py

※Linuxの方のみ依存関係をインストールする為、以下のプログラムも入力

A. Linux(Red Hat系)

$ dnf install libffi-dev libnacl-dev python3-dev

B. Linux(Debian系)

$ apt install libffi-dev libnacl-dev python3-dev

(インストール方法の出典と公式サイト↓)

2.openaiのインストール

$ pip install openai

(インストール方法の出典と公式サイト↓)

https://platform.openai.com/docs/libraries

8. Chat-GPTと一旦連携せずにBotを動かすプログラムを作成(動作確認)

必要なライブラリのインストールが終わったら、後はプログラムを作成し、実行すればbotが動きます。

では、botを動かすためのプログラムを作成していきましょう!
テンプレートは僕が以下に用意したので、そちらを使用します。

※プログラミング初心者の方へ

プログラムは言ってしまえばただの文章ファイルなので、Botを動かすだけなら一番簡単なのは、以下のプログラムをコピーし、メモ帳にペースト、その後「お好きな名前.py」(例: test_bot.pyなど)に名前を変換してプログラムを保存することです。

ただ、これでは今後ご自身でプログラムを書いたり、書き換えたりがとってもやりにくいので、「テキストエディタ」と呼ばれるプログラムの作成に特化したソフトをダウンロードすることをオススメします。

私の一番のオススメは「Visual Studio Code」です。インストールはとっても簡単なので、気になる方は調べて見てください!

動作確認用テンプレートプログラム

import discord
from discord.ext import commands

client = commands.Bot(command_prefix="!", intents=discord.Intents.all())

# Botが起動した際に実行されるイベント
@client.event
async def on_ready():
    print(f'Logged in as {client.user}')
    await client.change_presence(activity=discord.Game(name="試験運用"))

# 「!test」と送られた際に返答をするプログラム
@client.command()
async def test(ctx):
    await ctx.send("正常に動作しています。")

# システム停止コマンド
@client.command()
async def stop(ctx):
    await ctx.send('システムを停止します。')
    await client.close()

client.run("Discord API Keyをここに入力")

上記はBotが参加しているDiscordサーバー上で「!test」が送られてきたら「正常に動作しています。」とBotが送信するプログラムです。

他にも「!stop」と送ることで自動でプログラムの実行を停止する関数も記述してあります。

なお、DiscordとBotとのやり取りは「discord.py」ライブラリに任せているので、プログラムの詳細な意味を知りたい場合は「discord.py」のAPIリファレンスを確認していただけると良いかと思います。

上記のテンプレートプログラムをテキストファイルにペーストできたら、一旦保存しましょう。

そして、このプログラムでは、API Keyが入力されていない為、入力します。
皆さんは、セクション3でAPI Keyをメモしたと思いますので、そちらを上記プログラム一番下の「Discord API Keyをここに入力」に入力し、保存することにより、このプログラムがDiscord側で適切なBotアカウントに紐付けられます。

それでは、動作確認をしていきましょう!

ターミナルなどのコマンドラインで、以下のコマンドを打ち込みます。

なお、

保存したフォルダのパス→{folder_path}
プログラムの名前→test_bot.py

としています。

※プログラミング初心者の方へ

ファイルのパスはプログラムを皆さんがどこに保存したのかによります。プログラムのフォルダパスを確認する方法は使用しているOSによって異なりますので、各自でお調べいただけますと幸いです。

$ python3 {folder_path}/test_bot.py

実行後、Discord上でBotがオンライン状態になっていれば起動成功です!

「!test」をDiscordサーバー上で送ってみましょう!!
「正常に動作しています。」とBotから返信が来ればBotが正常に稼働しています!

なお、このプログラムでは、Botを停止させる際、「!stop」を送ることで停止させることができます。もし上手く停止しない場合は、コマンドラインで「Ctrl+C」の同時押しでもプログラムを停止させられます。

9. OpenAI APIの登録

動作確認ができたら、いよいよBotとChat-GPTの連携に進みます。Chat-GPTにメッセージを送り返答をもらうにもAPIを使用します。このセクションではOpenAI APIの登録とAPI Keyの取得までのやり方をお伝えします。

では、まずは以下のURLからOpenAIの開発者向けホームページにアクセスします。

https://platform.openai.com/docs/overview

アクセスしたら、右上のメニューボタンを押し、最下部の「Login」または「Sign up」をお願いします。
(Chat-GPTを使用したことがある方はアカウントをお持ちかと思います。法人の方など、組織としてOpenAI APIを使用されたい場合はアカウントを別で作成されると良いと思います。)

無事ログインできましたら、上部「Default project」→「Create Project」を選択します。
以下のような画面が表示されたら、お好きなプロジェクト名を英語で入力し、「Create」を押してください。

プロジェクトが正常に作成されたら右上、アイコン画像横の歯車マークを押し、設定に移動します。

設定が表示されたら、メニューの一番下、「Limits」を選択しましょう。


この画面ではプロジェクトのいろいろな制限(使用するモデルの制限や処理能力の制限など)を設定できます。

現時点ではどのモデルも使用できないよう制限されているので、「Select models」を押し、「Allow」で皆さんが利用したいモデルにチェックを入れます。

今回は2024年11月時点で最も安く新しい「GPT-4ο-mini」のみ使用可能にします。


「Save」を押して以下のような画面になったら成功です。

後はOpenAI APIを使用するためのAPI Keyも必要になるのでメニューから「API Keys」ページを表示させましょう。


上記の画面が表示されたら「Create new secret key」を押し、次の内容を入力しましょう。

「Owned by」→API Keyの所有者をプロジェクト自体にするのか、それともあなたにするのかです。基本的には「You」で大丈夫ですが、プロジェクトをあなたが抜けると使えなくなるので、複数人でBotを管理する場合は「Service account」を選択しましょう。

「Name」→API Keyを複数発行した際に、どれがどれのAPI Keyかわからなくなることを防ぐ為のメモです。お好みで入力してください。

「Project」→API Keyが機能する対象のプロジェクトを選択してください。僕は「Discord Bot」というプロジェクト名をつけていたのでそのように表示されています。

「Permissions」→そのままでOKです。

入力し終えたら「Create secret key」を押すとAPI Keyが表示されます。

なお、API Keyは1度しか表示されません。必ず安全なところにメモを取るようにしてください。万が一忘れた場合は、同様の手順で再度新たなAPI Keyを取得できます。その場合は以前のAPI Keyは手動で削除してください。

※プログラミング初心者の方へ

API Keyとはプログラムがそのアカウントとしてアクセスすることを許可するパスワードのような物です。

つまりこれが第三者に知られてしまうと、その第三者は自由に皆さんのアカウント経由で、皆さんのお金を使ってChat-GPTを動かせてしまいます。その為、絶対に第三者に教えないようにしてください。

最後に、Chat-GPTをAPI経由で使用するために、US$5.00 (2024/11/12: 日本円で約770円)をチャージします。

メニューから「Billing」を選択します。
以下のような画面が表示されたら「Add payment details」をクリックし、個人か法人かを選択したら、英語でカード情報や請求先住所情報を英語で入力してください。

最後に「Continue」を押せばカード宛にUS$5.00の課金が行われるはずです。

なお、オートチャージを別途オンにしなければ、US$5.00を使い切った時点でAPIが機能しなくなります。その際に追加で指定した金額をチャージしても良いですし、オートチャージをオンにしても良いかなと思います。

ちなみに、どのぐらい文章を送り、生成させるのかにもよりますが、1日に10往復程度のやりとりであればUS$5.00で半年程度は使えるかなと思います。

無事支払いも終われば、いよいよあとはプログラミングを残すだけです。

10. Chat-GPTと連携したBotのプログラミング

ようやくですね!
早速Botを動かすためのプログラムを作成していきましょう!

…といいつつ、今回もテンプレートは僕が以下に用意したので、そちらを使用すれば一瞬です。

Chat-GPT連携Discord Botプログラム

import discord
import openai
import json
from datetime import datetime
from discord.ext import commands

client = commands.Bot(command_prefix="!", intents=discord.Intents.all())

# Botが起動した際に実行されるイベント
@client.event
async def on_ready():
    print(f'Logged in as {client.user}')
    await client.change_presence(activity=discord.Game(name="試験運用"))

# Chat GPTとのやりとりに関するプログラム - ここから

# OpenAI APIキーを設定
openai.api_key = "OpenAI API Keyをここに入力"

# 会話ログを保存するjsonファイル名を設定
log_file = "chat_log.json"

# 会話ログの保存
def save_log(user, message):
    try:
        with open(log_file, "r", encoding="utf-8") as file:
            logs = json.load(file)
    except (FileNotFoundError, json.JSONDecodeError):
        logs = []

    logs.append({"user": user, "message": message, "timestamp": datetime.now().isoformat()})

    with open(log_file, "w", encoding="utf-8") as file:
        json.dump(logs, file, ensure_ascii=False, indent=4)

def load_logs():
    try:
        with open(log_file, "r", encoding="utf-8") as file:
            return json.load(file)
    except (FileNotFoundError, json.JSONDecodeError):
        return []

async def get_chatgpt_response(your_name, message_content):
    past_conversations = load_logs()[-50:]  # 直近の50個のメッセージを取得
    conversation_history = [{"role": "system", "content": "あなたはDiscord上でサーバーを管理するコンシェルジュです。"}]
    
    for convo in past_conversations:
        if convo["user"] == "GPT":
            conversation_history.append({"role": "assistant", "content": convo["message"]})
        else:
            conversation_history.append({"role": "user", "content": "私は" + convo["user"] + "です。" + convo["message"]})

    conversation_history.append({"role": "user", "content": "私は" + your_name + "です。" + message_content})

    try:
        response = openai.chat.completions.create(
            model="gpt-4o-mini",
            messages=conversation_history
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        print(f"Error: {e}")
        return None  # エラー時はNoneを返す

# メッセージを受け取ったときのイベント
@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith("GPTくん、"):
        user_message = message.content
        temp_message = await message.channel.send("応答中です…")
        
        chatgpt_response = await get_chatgpt_response(message.author.display_name, user_message)
        
        if chatgpt_response:
            # 会話ログを保存
            save_log(message.author.display_name, user_message)
            save_log("GPT", chatgpt_response)
            
            await temp_message.edit(content=chatgpt_response)
        else:
            await temp_message.edit(content="エラーが発生しました。")

    # 「GPTくん、」で始まらなかったメッセージは他のコマンドで処理をする必要がないかチェック
    # これがないと「!stop」などのメッセージコマンドが動作しない
    await client.process_commands(message)

# Chat GPTとのやりとりに関するプログラム - ここまで

# システム停止コマンド
@client.command()
async def stop(ctx):
    await ctx.send('システムを停止します。')
    await client.close()

client.run("Discord API Keyをここに入力")

上記プログラムは「GPTくん、」で始まる文章が送られてきたら、それをChat-GPTに投げ、返答を表示してくれるプログラムです。

実はOpenAI APIで呼び出したChat-GPTは、会話記録を持たず、毎回初めましての雰囲気で返答します。

そこでやり取りの履歴を別途chat_log.jsonとして保存し、毎回その会話記録の直近50件も送ることで、まるで記憶があるかのように振る舞うプログラムも実装してあります。

コメントアウトでこまめに処理の説明を入れてありますので、コメントアウトも宜しければお読みください。

なお、「!stop」でプログラムが停止するコマンドはテストプログラムに続き残してあります。

Chat-GPTとやりとりをする部分についてはOpenAI APIの公式ドキュメントをお読みになると理解が深まるかなと思います。

上記のプログラムをテストプログラムを保存したときと同じ要領でコピーアンドペースとして保存しましょう。

なお、今回はいくつか内容をみなさんで書き換えて頂かないといけない部分があるので以下の通り書き換えてください。

18行目:「OpenAI API Keyをここに入力」という文章を先ほどメモしたOpen AI APIのキーに書き換えてください。

98行目:「Discord API Keyをここに入力」という文章を事前にメモしたDiscord  APIのキーに書き換えてください。テストプログラムで使用したものと同じで構いません。

一通り書き換えが終わったら保存します。

それでは、いよいよ起動していきましょう!

ターミナルなどのコマンドラインで、以下のコマンドを打ち込みます。

なお、

保存したフォルダのパス→{folder_path}
プログラムの名前→gpt_bot.py

としています。

※プログラミング初心者の方へ

ファイルのパスはプログラムを皆さんがどこに保存したのかによります。Windowsの場合は「エクスプローラー」で・・・

$ python3 {folder_path}/gpt_bot.py

実行後、Discord上でBotがオンライン状態になっていれば起動成功です!

「GPTくん、こんにちは」とDiscord上で送ってみると・・・


お…?


キタ━(゚∀゚)━!

こんな感じに返信してくれれば成功です!自由に色々聞いてみてください!

なお、実は現時点ではプログラムを実行したターミナルを閉じるとBotも動かなくなってしまいます。

ずっと実行させたいときは、プログラムが動作するコンピュータのバックグラウンドで処理をさせておくために、プログラムを停止させてから、以下のコマンドで起動し直してみましょう。

$ nohup python3 {folder_path}/gpt_bot.py < /dev/null

こうすることでターミナルを閉じてもBotはオンラインのままになります!
(この方法で起動すると、「Ctrl+C」で簡単にプログラムを停止することができない為、Discordサーバーへで「!stop」を送って停止させてください。)

11. プログラムのカスタマイズとライセンスについて

本プログラムでは、Discordサーバーに送られてくるテキストを毎度確認し、「GPTくん、」から始まる場合はChat-GPTに処理をさせました。
もし、別の合言葉を設定したい場合は、上記のプログラム71行目の「GPTくん、」の部分を好きに書いていただくだけで済むかと思います。

また、今回はChat-GPTに「コンシェルジュとして」返答をするように設定しましたが、ここも45行目の「あなたはDiscordサーバー上で活躍するコンシェルジュです。」という設定文を好きに変えていただくことで、返答の雰囲気を簡単に変えることができます。

この簡単さと柔軟性が、OpenAI APIの凄いところですね。

今回紹介した動作確認用プログラムとChat-GPTを連携させたプログラムを組み合わせると「!」で始まるコマンドは特別な実装で処理しつつ、合言葉で始まる文章はChat-GPTに処理させるなんてこともできちゃいます。

上記で提供したプログラムはMITライセンスの元で自由に改変や公開をしていただいて問題ありませんので、是非自分だけのオリジナルコンシェルジュBotを完成させてみてください!

12. さいごに

いかがでしたでしょうか?
皆さんが無事Discord Botを完成させられていると嬉しいです!

トラブルや本記事に関するご意見、ご要望などは僕LunamikanのX(Twitter)にお送りいただければと思います。

最後に、ヨイノコエについて軽く紹介だけさせていただきます。

僕達「YOINOKOE PROJECT」は、テクノロジー✕クリエイターでエンターテイメントがすべての人にとって身近なものになることを目指し、活動しています。

今回の記事のような、皆さんが活用できる情報の公開やツール/サービスの開発から、オリジナル楽曲/MVの制作やVTuberのプロデュース/運営など、エンターテイメントに関する事業に幅広く取り組んでいます。クリエイターの方も、リスナーの方も、全員がワクワクする挑戦を続けていきますので、ヨイノコエのことを応援していただけると嬉しいです。

公式サイト↓

以下からヨイノコエ公式X(Twitter)のフォローもお願いします!

最後までお読みいただきありがとうございました。
またお会いしましょう!

いいなと思ったら応援しよう!