Discord.js无法捕获!register命令后的输入内容问题
问题:无法捕获!register命令后的用户输入内容
我想捕获用户在!register命令后输入的内容,存入newName变量并在控制台打印测试,但目前既存不了内容,控制台也没任何输出(连undefined都不打印)。我以为是split方法没生效,但就算不用split,直接存message.content也拿不到用户输入的内容。
我试过不使用split直接存储用户输入,还是不行;也试过只验证命令是否执行,程序也不会走后续代码,控制台没报错,就是拿不到!register命令后的内容。
当前代码:
if (message.content === '!registrar') { // pegue o nome do usuário digitado após o comando "!registrar" var newName = message.content.split(' ')[1]; console.log(newName); }
问题根源
核心问题是命令拼写不匹配:代码里判断的是!registrar(葡萄牙语“注册”),但你实际要用的命令是!register(英语“注册”)。用户输入!register时,message.content === '!registrar'的条件不成立,整个代码块根本不会执行,自然没有任何控制台输出。
解决方案
- 修正命令拼写匹配
把判断条件里的'!registrar'改成'!register',确保和实际使用的命令一致:
if (message.content === '!register') { var newName = message.content.split(' ')[1]; console.log(newName); }
- 用更健壮的命令判断方式
如果用户可能输入带空格的命令前缀(比如多打了空格),或者想兼容命令后直接跟内容的情况,建议用startsWith替代严格相等判断,避免格式问题导致匹配失败:
if (message.content.startsWith('!register')) { // 分割命令和参数,过滤空字符串(处理多个连续空格的情况) const parts = message.content.split(' ').filter(part => part); // 确保有参数才取,无参数时给默认值 const newName = parts[1] || '未输入名称'; console.log(newName); }
- 排查消息事件绑定
如果改了拼写还是不行,要确认代码是否正确监听了消息事件(比如Discord.js里的client.on('messageCreate', message => { ... })),确保消息事件能正常触发。
内容的提问来源于stack exchange,提问作者Renã Augusto
相关产品推荐
相关产品推荐

