はじめに
友人と使用しているDiscordサーバでChatGPTが流行っており,面白い会話内容を画像で共有していました.
そこで,チャンネル内で直接会話がしたいという要求で作成しました.
追記
GitHubにも上げました.
※注意
ChatGPTのAPIを利用するためには利用料金が発生します.会員登録時点で18ドル分のクレジットが追加され,登録から3ヶ月間使用することができます.3ヶ月を過ぎ,支払い登録をすると,18ドル相当のクレジットも支払対象になります.
金額は1000トークンで0.2円ほど(正確な金額はこちら)で日本語は1文字当たり1~3トークン程と言われています.
支払い登録をしなければ3ヶ月時点で自動的に使用できなくなるため,まずは3ヶ月間試してみるといいと思います.
目次
1.botアカウント作成
2.OpenAIのAPIキーの発行
3.プログラムの作成
4.Botの招待
5.Botの起動
6.自動実行(おまけ)
7.おわりに
1. botアカウント作成
まずは以下のサイトにアクセスして,botアカウントを作成しましょう.
New Applicationからアプリケーションの名前を入力して続行.
Add Botを押してボットを作成
ここでbotで表示したい名前とアイコンを入力します.
チェックボックスはこのようにしました.一番上の設定は,自分以外の人がこのBotをサーバに追加できるか決めるものです.嫌だったらオフにしましょう.
下の設定はBotがサーバからメッセージを読めるようにするかを決める設定です.基本オンでいいと思います.
USERNAMEの下にはTokenがあると思います.これを利用して作成したプログラムとBotを紐付けます.後で使うのでメモしておきましょう.
このページはまた後で使用するので開いておいてください.
2. OpenAIのAPIキーの発行
以下のリンクを開いてください.
アカウントが無ければ作成し,以下のようなページが開ければOK
右上の自分のアカウントを押し,View API keysを押します.
Create new secret keyを押し,APIキーを作成します.後で使用するのでメモしておいてください.ページは閉じても大丈夫です.
3. プログラムの作成
まずはライブラリのインストールを行います.
pip install discord.py
pip install openai
次にプログラムを作成します.
import discord
import openai
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
token = "-------" #Discordのトークンを入力
openai.api_key = "----" #APIキーを入力
model_engine = "gpt-3.5-turbo"
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
@client.event
async def on_message(message):
global model_engine
if message.author.bot:
return
if message.author == client.user:
return
if message.content.startswith('/gpt'):
msg = await message.reply("生成中...", mention_author=False)
try:
prompt = message.content[4::]
if not prompt:
await msg.delete()
await message.channel.send("質問内容がありません")
return
completion = openai.ChatCompletion.create(
model=model_engine,
messages=[
{
"role": "system",
"content": "日本語で返答してください。"
},
{
"role": "user",
"content": prompt
}
],
)
response = completion["choices"][0]["message"]["content"]
await msg.delete()
await message.reply(response, mention_author=False)
except:
import traceback
traceback.print_exc()
await message.reply("エラーが発生しました", mention_author=False)
client.run(token)
上記コードでは各コマンドごとに独立した応答が行なえます.連続して会話を行うためにはもう少し工夫する必要があります.
トークンの部分とAPIキーの部分を書き換えてファイルを保存します.
4. Botの招待
Discordの管理ページに戻ります.一応再度リンク
作成したアプリケーションを選択し,左のメニューからOAuth2の中のURL Generatorを選択.
botにチェックを入れるとページ下部に招待用のリンクが表示されます.
リンクをコピーしてブラウザに貼り付けると招待ページが表示されるので,招待したいサーバを選択して招待してください.
以降もこのbotを招待したい場合は,このURLから招待できます.
botがサーバに追加されればOK(現状はオフラインになっているはず)
5. Botの起動
作成したPythonファイルを実行します.
python ファイル名.py
このように表示されればOK.
サーバで/gpt こんにちは
等入力し,返答が帰ってくれば起動成功です.
6. 自動実行(おまけ)
私の環境ではbatファイルを使用して,自動起動しています.
python chatGPT.py
ここではGPT.batというファイル名とします.
これでクリックだけで起動できるようになりました.しかし黒い画面が出るのが煩わしいので,バックグラウンドで開けるようにします.
vbsファイルを作成
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c GPT.bat", vbhide
ここではGPT.vbsとします.これでバックグラウンド実行されるようになりました.実行しているかどうかはDiscordのオンライン表示で確認してください.あとはこれをスタートアップに追加すればPCを起動したタイミングで自動的にBotが起動するようになります.
もっといいやり方あったら教えてください.
7. おわりに
更新に伴って焦って書いたので,間違っていること,別のやり方のほうが良いことなどあれば教えてください.