Discord.js命令异常:+sendtextbutton按钮标签含命令本身
问题解决:按钮标签去掉命令前缀
你的问题出在拼接按钮标签时没有移除命令本身,当前代码把包含+sendtextbutton的完整消息内容都当成了标签文本,所以才会出现命令+输入内容的情况。另外代码里args的定义顺序有问题,会导致未定义错误,一起调整。
修改后的代码:
client.on('messageCreate', async message => { if (message.content.startsWith(`+sendtextbutton`)) { const args = message.content.trim().split(/ +/g); // 先判断权限 if (!config.bot.owners.includes(`${message.author.id}`)) { if (!args[1]) return message.react("❌"); // 这里判断args[1],因为args[0]是命令 return; } // 去掉第一个元素(命令),拼接剩下的内容作为标签 let text = args.slice(1).join(' '); // 没有输入内容则返回 if (!text) return message.react("❌"); const embed = new MessageEmbed() .setColor(0x0099FF) .setTitle('press the button'); let button = new MessageButton() .setLabel(text) .setStyle(`LINK`) .setURL(`youtube.com`) .setEmoji(`📍`) let row = new MessageActionRow() .setComponents(button) message.channel.send({embeds: [embed], components: [row] }) } })
关键改动说明:
- 把
args的定义移到权限判断前面,避免未定义错误 - 用
args.slice(1).join(' ')替代原来的args.join(' '),slice(1)会剔除数组第一个元素(也就是+sendtextbutton命令),只保留后面的用户输入内容 - 权限判断里的参数检查改成
!args[1],因为此时args[0]是命令,args[1]才是用户输入的内容
内容的提问来源于stack exchange,提问作者italuan
相关产品推荐
相关产品推荐

