You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:09:01