Discord机器人hex命令无效十六进制码错误提示功能实现方法
问题原因
你当前的代码存在两个核心问题:
- 你写的
if(!hexToRgb(hex)) return message.reply("Not a valid hex.")这行代码在hexToRgb函数内部调用自身,会触发无限递归导致程序崩溃,完全起不到校验作用 - 没有添加有效的十六进制格式校验规则,无法过滤
#GGGGGG、"Hello"这类无效输入
修复后的完整代码
if (command === "hex") { let hex = args[0] if(!hex) return message.reply("Please specify a hex code!") // 十六进制格式校验,支持带/不带#的3位、6位合法色码 const hexReg = /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/ if(!hexReg.test(hex)) return message.reply("无法将输入内容转换为有效颜色,请输入正确的十六进制色码") function hexToRgb(hex) { if (hex.charAt(0) === '#') hex = hex.substring(1) // 兼容3位短色码,比如#fff自动转换为ffffff if(hex.length === 3) { hex = hex.split('').map(item => item + item).join('') } const bigint = parseInt(hex, 16); const r = (bigint >> 16) & 255; const g = (bigint >> 8) & 255; const b = bigint & 255; return `${r},${g},${b}`; } try { let embed = new Discord.MessageEmbed() .setTitle("Hex Code") .setColor(hex) .addFields({ name: `RGB`, value: hexToRgb(hex) }) message.channel.send({embeds: [embed]}) } catch (err) { // 兜底异常捕获,避免极端情况导致程序崩溃 message.reply("无法将输入内容转换为有效颜色,请输入正确的十六进制色码") } }
改动说明
- 新增正则校验规则,输入不符合十六进制色码格式时直接返回提示
- 删除了原代码中函数内部的递归调用逻辑,避免死循环
- 增加3位短hex码的兼容处理,比如
#fff这类常用短码也能正常转换 - 新增try/catch兜底逻辑,极端异常场景下也能正常返回提示,不会导致机器人崩溃
内容的提问来源于stack exchange,提问作者rainbow
相关产品推荐
相关产品推荐

