如何在Discord.js中移除消息内的命令前缀及命令内容
解决?send命令只发送命令后内容的问题
你当前代码直接发送message.content,这会把用户输入的完整消息(包含前缀?和send命令)全部发送出去。要只发送命令后的内容,有两种实用方案:
方案1:利用args参数
多数Discord命令框架会自动把命令后的内容拆分到args数组里,只需将数组元素用空格拼接即可:
修改发送消息的代码行:
// 替换原有的 message.channel.send(`${message.content}`); message.channel.send(args.join(' '));
方案2:手动截取消息内容
如果你的框架没有自动处理args,可以手动截掉前缀和命令部分:
const prefix = '?'; // 你的命令前缀 // 计算需要移除的内容长度:前缀+命令名+命令后的空格 const removeLength = (prefix + this.name).length + 1; // 截取并清除首尾多余空格 const content = message.content.slice(removeLength).trim(); message.channel.send(content);
修改后的完整代码(方案1实现)
module.exports = { name: `send`, description: "sends a message through the bot", execute (client, message, args){ const Crash = message.guild.roles.cache.find(r => r.name === "Crash"); if(message.member.roles.cache.has(Crash.id)) { message.delete({timeout: 100}) // 拼接args数组得到命令后的内容 message.channel.send(args.join(' ')); } else { message.channel.send(`You cant use this command`); } } }
注:你代码中定义的channel变量未被使用,如果需要将消息发送到指定频道,可以把message.channel.send替换为channel.send。
内容的提问来源于stack exchange,提问作者Icebreaker
相关产品推荐
相关产品推荐

