使用配置文件时Discord.js前缀失效问题求助
解决Discord.js前缀无法识别的问题
嘿,我一眼就揪出你代码里的问题啦!
你在判断!ping命令的时候写了这行:
if (message.content === '${prefix}ping') {
这里用了单引号包裹字符串,但模板字符串(就是用${变量名}插入变量的写法)只有在**反引号()**包裹时才会生效。单引号里的${prefix}会被当成普通文本,而不是读取你config.json里配置的!前缀。也就是说,你的代码现在在判断消息内容是不是字面量${prefix}ping,而不是!ping`,自然不会触发回复啦。
修正后的核心代码
把那行改成用反引号包裹的模板字符串就搞定了:
client.on('message', message => { if (message.content === `${prefix}ping`) { // 这里替换成反引号 message.channel.send('Pong.'); } if (message.content === '!test') { message.channel.send('Test not found'); } });
额外的优化建议
为了让代码更易维护,你可以统一先判断消息是否以设定前缀开头,再提取命令,这样以后改前缀或者加新命令都不用重复调整:
const Discord = require('discord.js'); const { prefix, token } = require('./config.json'); const client = new Discord.Client(); client.on('ready', () => { console.log('Ready!'); }); client.on('message', message => { // 忽略机器人自己发的消息,避免循环触发 if (message.author.bot) return; // 消息不是设定前缀开头就直接跳过 if (!message.content.startsWith(prefix)) return; // 提取去掉前缀后的命令内容 const command = message.content.slice(prefix.length).trim(); if (command === 'ping') { message.channel.send('Pong.'); } if (command === 'test') { message.channel.send('Test not found'); } }); client.login(token);
这样不管你以后怎么修改前缀,所有命令都能自动适配啦~
内容的提问来源于stack exchange,提问作者Dark Mistress
相关产品推荐
相关产品推荐

