✋
ChatGPTをDiscordで使えるようにしてみた(nest.js)
超ざっくり手順の説明をするよ
まずnode.jsを使うね
1.プロジェクトを作る
- 適当な名前で空のフォルダを作成
- package.jsonの作成・インストール
- 空のindex.jsを作成
command
npm init -y
npm install discord.js openai dotenv
- discordのトークン/OpenAIのORG・KEYが後で必要になります
2. Discord Developer Portalでbot作成
1.以下のリンクにアクセス
2.新規Applicationの作成
- New Applicationボタンを押下、名前を設定し作成
- 作成したApplicationからBotを選択し、Add Botで作成
- トークンの発行
- これが.envのDISCORD_TOKENにあたる
- BOTのMESSAGE CONTENT INTENT にチェック
3. discordの鯖へ招待
1. ApplicationのOAuth2でURL Generatorを行いアクセス
- SCOPESのbot・BOT PERMISSIONSのAdministratorにチェック
- 以下のようなURLになる(client_idは自分のID)
https://discord.com/api/oauth2/authorize?client_id={自分のID}&permissions=8&scope=bot
- URLにアクセス、鯖を選択して招待
4.OpenAIで必要情報の取得
1.KEYの発行と.envの設定
- ログインして右上の個人アイコンからView API Keysを選択
- Create new secret keyを押下して、KEYを発行
- これが.envのOPENAI_KEY
- 同画面のsettingsからOrganization IDを探す
- これが.envのOPENAI_ORG
5.実装
1. APIを利用して実装する
index.js
require("dotenv").config();
const { Client, GatewayIntentBits } = require("discord.js");
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
organization: process.env.OPENAI_ORG,
apiKey: process.env.OPENAI_KEY,
});
const openai = new OpenAIApi(configuration);
client.on("messageCreate", async function (message) {
try {
if (message.author.bot) return;
const getResponse = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: `${message.content}` }],
});
message.reply(`${getResponse.data.choices[0].message.content}`);
return;
} catch (err) {
console.log(err);
}
});
client.login(process.env.DISCORD_TOKEN);
2. 実行
node .\index.js
- こんな感じに表示されればOK!
6.text-davinci-003との違い
- openai.createCompletionからopenai.createChatCompletion
- promptからmessages
- roleという権限が必要になった
text-davinci-003
const getResponse = await openai.createCompletion({
model: "text-davinci-003",
prompt: `${message.content}`,
temperature: 0.9,
max_tokens: 500,
});
gpt-3.5-turbo
const getResponse = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: `${message.content}` }],
});
Discussion