Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Bot Discord có thể chào thành viên mới, trả lời lệnh, quản lý kênh hay phát nhạc. Với Node.js và thư viện discord.js, bạn có thể làm bot đầu tiên chỉ trong khoảng một giờ. Bài này hướng dẫn tạo ứng dụng bot, mời vào máy chủ thử nghiệm và viết lệnh slash đơn giản.
Hãy tạo một máy chủ Discord riêng chỉ để thử nghiệm. Trong mục OAuth2 > URL Generator, chọn phạm vi (scope) bot và applications.commands, cấp quyền tối thiểu cần thiết như gửi tin nhắn. Mở đường dẫn được tạo ra và chọn máy chủ để mời bot. Nguyên tắc quyền tối thiểu giúp hạn chế rủi ro nếu bot bị lợi dụng.
Cần Node.js phiên bản đủ mới theo yêu cầu của discord.js (xem tài liệu chính thức). Tạo dự án:
mkdir my-bot
cd my-bot
npm init -y
npm install discord.js dotenvTạo file .env chứa thông tin bí mật và thêm nó vào .gitignore:
DISCORD_TOKEN=dán_token_của_bạn
CLIENT_ID=dán_application_id
GUILD_ID=id_máy_chủ_thử_nghiệmBạn lấy GUILD_ID bằng cách bật Developer Mode trong cài đặt Discord rồi chuột phải vào tên máy chủ chọn Copy Server ID.
Lệnh slash phải được đăng ký với Discord. Tạo file deploy-commands.js:
require('dotenv').config();
const { REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder()
.setName('ping')
.setDescription('Kiểm tra bot còn sống không'),
new SlashCommandBuilder()
.setName('chao')
.setDescription('Bot chào bạn')
.addStringOption((opt) =>
opt.setName('ten').setDescription('Tên của bạn').setRequired(false)
),
].map((c) => c.toJSON());
const rest = new REST().setToken(process.env.DISCORD_TOKEN);
(async () => {
await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands }
);
console.log('Đã đăng ký lệnh.');
})();Chạy node deploy-commands.js một lần mỗi khi bạn đổi danh sách lệnh. Đăng ký theo máy chủ (guild) có hiệu lực gần như tức thì, thích hợp để thử; đăng ký toàn cục có thể mất thời gian để lan truyền.
Tạo file index.js:
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => {
console.log('Đã đăng nhập với tên ' + c.user.tag);
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
await interaction.reply('Pong!');
} else if (interaction.commandName === 'chao') {
const name = interaction.options.getString('ten') ?? interaction.user.username;
await interaction.reply('Xin chào ' + name + '!');
}
});
client.login(process.env.DISCORD_TOKEN);Chạy node index.js, rồi vào máy chủ thử nghiệm gõ /ping hoặc /chao. Discord yêu cầu phản hồi trong khoảng 3 giây; với tác vụ lâu hơn, dùng interaction.deferReply() rồi editReply sau.
Để bot đọc nội dung tin nhắn thường (không phải lệnh slash), cần bật intent MessageContent trong Developer Portal và thêm vào mã. Đây là intent đặc quyền và Discord khuyến khích dùng lệnh slash khi có thể, vừa thân thiện vừa tôn trọng quyền riêng tư.
applications.commands.Khi muốn bot trực tuyến 24/7, chạy nó trên VPS bằng trình quản lý tiến trình như PM2 hoặc đóng gói với Docker.
Bạn đã tạo bot, cấu hình quyền, đăng ký lệnh và xử lý tương tác. Từ đây có thể thêm nút bấm, menu chọn, cơ sở dữ liệu và những lệnh hữu ích cho cộng đồng của bạn.
Nếu muốn học JavaScript và Node.js bài bản để làm bot và nhiều ứng dụng khác, hãy xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment