discord.js 运行$dm命令时误触发$help命令发送重复内容问题求助
问题原因
核心问题出在$help命令的分支结构上:
你写的else if (message.content === "$help") {}仅跟了一对空的大括号,后续生成帮助Embed、发送消息的代码完全没有被包含在这个条件分支内,属于全局生效的代码,所以不管触发的是哪一个命令,只要通过了最开头的前缀、机器人消息校验,这段帮助消息的代码都会无条件执行,这就是你调用$dm也会弹出帮助的直接原因。
除此之外代码还存在几处语法不规范问题:
- ready事件的
console.log('Ready!')写在了事件回调函数的外部,启动时不会正常打印 - message事件开头重复写了两次完全相同的前缀、机器人消息校验逻辑
- 多处括号配对错误
修正后的完整代码
const Discord = require('discord.js'); const { prefix, token } = require('./config.json'); const client = new Discord.Client(); const { MessageEmbed } = require('discord.js'); client.once('ready', () => { client.user.setActivity('Use $help for a list of commands!', { type: "PLAYING" }); console.log('Ready!'); }); client.on('message', message => { if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).trim().split(' '); const command = args.shift().toLowerCase(); if (message.content.startsWith(`${prefix}ping`)) { message.channel.send('Pong.'); } else if (message.content.startsWith(`${prefix}beep`)) { message.channel.send('Boop.'); } else if (message.content === `${prefix}server`) { message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`); } else if (message.content === `${prefix}user-info`) { message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`); console.log(message.content); } else if (message.content === (`${prefix}dm`)) { message.author.send("string"); } else if (message.content === "$help") { let embed = new MessageEmbed() .setTitle("Command List") .setDescription("$help, $ping, $beep, $server, $user-info, $dm") .setColor("RANDOM") message.channel.send(embed) } }); client.login(token)
内容的提问来源于stack exchange,提问作者user16486451
相关产品推荐
相关产品推荐

