如何让Discord.JS机器人在私信中响应指定命令?
实现Discord.JS机器人的.hello命令回复功能
没问题,这是Discord.js里非常基础的命令实现,我一步步带你完成:
1. 准备工作
首先确保你已经完成了基础的环境搭建:
- 安装了Node.js(建议LTS版本,比如18.x或20.x)
- 在项目文件夹里安装Discord.js依赖:
npm install discord.js - 已经在Discord开发者平台创建好机器人,拿到了机器人的Token,并且把机器人邀请到了你的服务器(需要勾选
bot和applications.commands权限)
2. 编写核心代码(以Discord.js v14为例)
创建一个index.js文件,写入以下代码:
const { Client, GatewayIntentBits } = require('discord.js'); // 初始化客户端,需要指定必要的权限(Intents) const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 服务器相关权限 GatewayIntentBits.GuildMessages, // 服务器消息权限 GatewayIntentBits.MessageContent // 读取消息内容的权限(必须开启,否则拿不到消息文本) ] }); // 机器人上线时触发的事件 client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); }); // 监听消息创建事件 client.on('messageCreate', (message) => { // 跳过机器人自己发送的消息,避免循环回复 if (message.author.bot) return; // 定义命令前缀和命令内容 const prefix = '.'; // 判断消息是否以指定前缀开头 if (!message.content.startsWith(prefix)) return; // 提取命令部分(去掉前缀后的内容) const command = message.content.slice(prefix.length).trim().toLowerCase(); // 判断是否是hello命令 if (command === 'hello') { // 回复消息(@发送者) message.reply('Hello there! 😊'); // 也可以用 message.channel.send('Hello!') 直接发送到频道,不@用户 } }); // 用机器人Token登录 client.login('你的机器人Token');
3. 关键注意点
- Intents权限开启:
MessageContent权限需要你在Discord开发者平台的机器人页面,找到「Privileged Gateway Intents」手动开启,否则机器人无法读取消息内容。 - 避免循环回复:一定要判断
message.author.bot,跳过机器人自己的消息,不然可能出现无限循环回复的情况。 - Token保密:绝对不要把机器人Token直接写在代码里提交到仓库!后续可以用
dotenv包管理环境变量,更安全。
4. 测试运行
在终端执行:
node index.js
看到控制台输出Logged in as [你的机器人标签]!后,到服务器里发送.hello,机器人就会给你回复啦!
如果你用的是Discord.js v13
v13的Intents写法略有不同,把客户端初始化部分改成下面的代码即可,其余逻辑完全一致:
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT ] });
内容的提问来源于stack exchange,提问作者thiccsupreme
相关产品推荐
相关产品推荐

