Discord.js如何让消息收集器将收集内容转为大写实现大小写不敏感匹配
问题原因
你之前添加的let msg = message.content.toUpperCase();是对触发verify指令的原始消息内容做大写转换,这个变量和后续消息收集器返回的消息对象完全无关:收集器回调函数的参数命名也为msg,直接覆盖了外层的变量,你所有匹配逻辑判断的都是用户后续回复的原始未转换内容,自然无法实现大小写不敏感匹配。
修复步骤
- 在收集器的
collect事件回调第一行,先对用户回复的内容做统一大写转换 - 将所有匹配判断的条件值也改为全大写,和转换后的输入内容对齐
- 修复代码里隐藏的状态角色判断数组语法错误:原代码把两个州角色ID写在了同一个字符串里,会导致已拥有州角色的判断逻辑失效
修改后的核心代码示例
collector.on('collect', async msg=>{ // 新增:统一将用户输入转为全大写 const input = msg.content.toUpperCase(); // 匹配判断改为用转换后的input变量,条件值改为全大写 if(input === "DIXIE" ){ // 修复数组语法错误:两个ID拆分为独立元素 const arr = ['878755312159588462', '878764278931410996', '878764342462517298'] if(message.member.roles.cache.some(r => arr.includes(r.id))) return message.channel.send('⚠️ You already have a state') if(msg.member.roles.cache.has(Dixie)) { message.channel.send(`🚫 Already have the state of ${msg.content}`) } else { try{ message.member.roles.add(Dixie) message.channel.send(`State of ${msg.content} Assigned✅`); message.channel.send({ embed: PartyMenu }); } catch(error) { message.channel.send("⚠️Error has occurred, please contact server adminstrator."); console.log(error) } } } // 其余所有判断逻辑都按该规则修改即可: // 把原判断里的msg.content替换为input,判断的字符串改为全大写 // 示例:移除Dixie的判断改为if(input === "RDIXIE"),Pacifica匹配改为if(input === "PACIFICA"),确认的yes改为if(input === "YES"),以此类推 })
其他说明
给用户的提示回复可以保留原始的msg.content输出,不需要用转换后的大写内容,不会影响用户使用体验。
内容的提问来源于stack exchange,提问作者Randosa
相关产品推荐
相关产品推荐

