必須先吐槽使用經驗,不知道是這陣子使用的人多還是怎樣,訊息常常已讀不回,強力譴責。
非營利人工智慧研究組織 OpenAI 在 11 月 30 日推出新型聊天機器人模型 ChatGPT,他也有另外一個兄弟 InstructGPT,訓練模型及機器都是使用 Azure AI 超級計算集群訓練。然後…就像最近在臉書、TG 看到的,他可以回答各式各樣的問題,不限語言,甚至可以幫你糾正程式碼,還可以依照你的 Coding Style 給出對應的回應(當然,所產生的程式碼不一定是對的)。
ChatGPT 收集的資料截止於 2021 年止,推測應該是在 10 月以前收集的資料(因為他不知道 Window 11 ,而這是在 10 月時推出的)
ChatGPT 是在網站上的,不過身為 Discord 愛好者,當然要想辦法把 ChatGPT 這東西搬到 Discord 中啊!於是上網查了查,發現竟然已經有人寫好了 JS 套件,那身為懶惰鬼的我們當然要直接拿來用啊!
Github 專案連結
程式碼解析
import discord from "discord.js";
import { ChatGPTAPI } from 'chatgpt'
const token = "";
const session = "";
const {Client, GatewayIntentBits} = discord;
const intents = [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent
];
const client = new Client({intents});
client.login(token);
client.on("messageCreate", (message) => {
//Example: message.channel.id != 1049943749238739015
if (message.channel.id != HERE IS YOUR CHANNE ID) {
return;
}
//this is bot id, prevent bot reply itself
if (message.author.id == HERE IS YOUR BOT ID) {
return;
}
(async () => {
const api = new ChatGPTAPI({ sessionToken: session })
await api.ensureAuth()
const response = await api.sendMessage(message.content)
for (let i = 0; i < response.length; i += 2000) {
const toSend = response.substring(i, Math.min(response.length, i + 2000));
message.reply({content: toSend});
}
})()
});
首先有關下面兩個變數
const token = "";
const session = "";
token 指的是你的 Discord Bot Token ,你可以在 Discord Developer 中看到。
session 是指你在 ChatGPT Cookie 中的 __Secure-next-auth.session-token
,你可以透過 F12 前往「儲存空間」分頁,找到 Cookie 中,將 __Secure-next-auth.session-token
的值貼上到 session 變數中。

接下來是下面這串條件式
if (!message.chennel.id != HERE IS YOUR CHANNE ID) {
return;
}
if (message.author.id == HERE IS YOUR BOT ID) {
return;
}
用意是指定機器人在特定頻道接收所有訊息並回覆,當然有些人的做法是用特定前綴,這當然也可行。有關 Channel ID 如何獲得,請自行開啟 Discord 開發者模式並且右鍵該頻道即可複製 ID。機器人 ID 也是一樣右鍵獲得。
最後是主體
for (let i = 0; i < response.length; i += 2000) {
const toSend = response.substring(i, Math.min(response.length, i + 2000));
message.reply({content: toSend});
}
有鑒於 ChatGPT 可能會讓訊息超過 2000 字,但這很明顯超過 Discord 的限制,所以我們先做的條件限制,以避免機器人報錯導致擺爛。這邊訊息用的是 message.reply
來直接回覆傳訊者的訊息,這樣可以有效的避免訊息雜亂無章的情況。
安裝方法
- 下載 https://github.com/kangjwme/ChatGPT-Discord-Bot 或是 git clone 下來
- 安裝必要 npm 套件直接
npm install
即可 - 啟動檔案
node index.js
,這樣就可以來測試你的機器人了
常見問題
出現「Disallowed Intents」字樣(感謝HaoXuan提供)

代表說你沒有啟用 Discord 的 message intent 導致他無法監聽訊息,請到 Discord Develop 你的機器人中把它開起來。

重新啟動後即可。