- vừa được xem lúc

Hướng dẫn tạo Discord Chatbot hiện đại với ES6, Discord.js, Bun và tích hợp ChatGPT

0 0 1

Người đăng: Duy Nguyen

Theo Viblo Asia

Hướng dẫn này sẽ giúp bạn tạo một chatbot Discord hiện đại sử dụng ES6, Discord.js, Bun và tích hợp khả năng của ChatGPT.

CleanShot 2024-12-01 at 16.14.34@2x.png

Hãy bắt đầu bằng việc thiết lập cấu trúc dự án:

project-root/
├── src/
│ ├── commands/
│ │ ├── ping.js
│ │ └── ask.js
│ ├── utils/
│ │ └── openai.js
│ ├── config.js
│ └── index.js
├── package.json
├── docker-compose.yaml
└── Dockerfile 

Đầu tiên, tạo một ứng dụng Discord mới tại Discord Developer Portal. Thiết lập bot của bạn và kích hoạt các intent cần thiết.

Bây giờ, hãy triển khai bot của chúng ta sử dụng ES6 modules. Đây là nội dung cho từng file:

  1. src/config.js:
export const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN;
export const CLIENT_ID = process.env.CLIENT_ID;
export const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
  1. src/utils/openai.js:
import { Configuration, OpenAI }from "openai";
import { OPENAI_API_KEY }from '../config.js'; const configuration = new Configuration({ apiKey: OPENAI_API_KEY,
}); export const openai =new OpenAI(configuration); export async function askChatGPT(question) { try { const response =await openai.createCompletion({ model: "text-davinci-002", prompt: question, max_tokens: 150 }); return response.data.choices[0].text.trim(); } catch (error) { console.error('Error asking ChatGPT:', error);
throw error; }
} 
  1. src/commands/ping.js:
export const data = { name: 'ping', description: 'Replies with Pong!'
}; export async function execute(interaction) { await interaction.reply('Pong!');
} 
  1. src/commands/ask.js:
import { askChatGPT }from '../utils/openai.js'; export const data = { name: 'ask', description: 'Ask ChatGPT a question', options: [{ name: 'question', type: 3, description: 'Your question', required: true }]
}; export async function execute(interaction) { const question = interaction.options.getString('question'); await interaction.deferReply(); try { const answer = await askChatGPT(question); await interaction.editReply(`Q: ${question}\nA: ${answer}`); } catch (error) { console.error(error); await interaction.editReply('Sorry, there was an error processing your request.'); }
}
  1. src/index.js:
import { Client, GatewayIntentBits, REST, Routes } from 'discord.js';
import { DISCORD_BOT_TOKEN, CLIENT_ID } from './config.js';
import * as pingCommand from './commands/ping.js';
import * as askCommand from './commands/ask.js'; const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent ],
}); const commands = [ pingCommand.data, askCommand.data
]; const rest = new REST({ version: '10' }).setToken(DISCORD_BOT_TOKEN); async function main() { try { console.log('Started refreshing application (/) commands.'); await rest.put(Routes.applicationCommands(CLIENT_ID), { body: commands }); console.log('Successfully reloaded application (/) commands.'); client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); }); client.on('interactionCreate',async interaction => { if (!interaction.isChatInputCommand())return; if (interaction.commandName === 'ping') { await pingCommand.execute(interaction); } else if (interaction.commandName === 'ask') { await askCommand.execute(interaction); } }); await client.login(DISCORD_BOT_TOKEN); }catch (error) { console.error(error); }
} main();

Cập nhật package.json và sửa “type” thành “module”:

{ **"type": "module",** "dependencies": { "discord.js": "^14.0.0", "openai": "^3.0.0" }
}

Tiếp theo hãy tạo file **docker-compose.yaml**với nội dung sau:

version: '3'
services: bot: build: . environment: - DISCORD_BOT_TOKEN=<YOUR_BOT_TOKEN> - CLIENT_ID=<YOUR_CLIENT_ID> - OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>

Và cuối cùng là Dockerfile:

FROM node:latest WORKDIR /app COPY package.json . RUN npm install COPY . . CMD ["node", "src/index.js"]

Khởi động bằng docker compose up, sau đó thêm chatbot của bạn vào Discord server, và sử dụng lệnh /ask hoặc /ping để tương tác với chatbot.

Cấu trúc hiện đại này sử dụng ES6 modules và tách biệt các chức năng thành các file riêng biệt, giúp codebase dễ bảo trì và mở rộng hơn. Bot giờ đây hỗ trợ các lệnh slash cho cả chức năng ping và ask, với chức năng sau tích hợp ChatGPT để cung cấp câu trả lời thông minh.

Nhớ thay thế các giá trị placeholder trong file docker-compose.yaml bằng token Discord bot, client ID và OpenAI API key thực tế của bạn.

Với cấu trúc này, bạn có thể dễ dàng thêm nhiều lệnh hơn bằng cách tạo các file mới trong thư mục commands và import chúng trong file index.js.

Nếu bạn muốn tiết kiệm thời gian và bắt đầu với một nền tảng vững chắc, bạn có thể tham khảo repository boilerplate này: https://github.com/mrgoonie/bun-discord-bot. Nó cung cấp một điểm khởi đầu tuyệt vời để xây dựng Discord bot với Bun.

Tôi cũng đã dùng nó để xây dựng lên DigiCord AI với hơn 8K người dùng.

Chúc bạn code vui vẻ và thú vị khi xây dựng Discord bot của mình!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tạo một Discord Bot phát nhạc đơn giản bằng Node.js, Typescript và deploy lên Heroku

Mở đầu. Chắc hẳn chúng ta đã nghe đến Discord.

0 0 149

- vừa được xem lúc

Webhooks 102: Practice send a new Github issue to Discord

Ở phần trước trước chúng ta đã tìm hiểu về webhooks cũng như cách thức hoạt động của một webhook. Để củng cố thêm kiến thức về chủ đề này, phần 2 mình sẽ giới thiệu cách bạn cài đặt 1 webhook với một

0 0 29

- vừa được xem lúc

Section 32: Xây dựng hệ thống loggers sử dụng Discord vào dự án eCommerce Backend Node.js | Auto Bot

Video được đăng tại channel Tips Javascript

0 0 24

- vừa được xem lúc

Section 33: Export Service Push Log Router backend lên Discord với Postman eCommerce Backend Node.js

Video được đăng tại channel Tips Javascript

0 0 21

- vừa được xem lúc

Giới thiệu về Midjourney: Bí thuật “thay đầu” nhân vật

Ứng dụng tạo ra phiên bản chân dung “thần thánh”. . 1.Cấu trúc prompt.

0 0 14

- vừa được xem lúc

Code-Splitting: Chìa khóa giúp ứng dụng Discord trở lên mượt mà

Discord là một ứng dụng cho phép người dùng giao tiếp lẫn nhau bằng giọng nói (voice chat) hoặc bằng văn bản (text chat) với hơn 10 triệu người dùng hoạt động mỗi ngày. .

0 0 16