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

Discord.js开发中输入-Vouch同时触发-Vouches命令问题求助

问题解决方案

根因分析

你使用startsWith()匹配命令的逻辑存在漏洞:-Vouch和-Vouches两个命令名存在前缀重叠,前缀匹配逻辑无法区分短命令输入和长命令的前缀部分,导致输入一个命令时同时进入两个命令的判断分支。

最优修复方案

推荐先拆分消息内容提取纯命令字段,再做精确全等匹配,从根源避免前缀重叠误触发问题,规范实现代码如下:

client.on("message", (message) => {
    // 基础逻辑:过滤机器人自身发送的消息,避免触发循环
    if (message.author.bot) return;

    // 按空格拆分消息,提取首个元素为命令名,剩余为参数
    const args = message.content.trim().split(/\s+/);
    const command = args[0];

    // 精确匹配-Vouches命令
    if (command === "-Vouches") {
        const user = message.mentions.users.first();
        if (!user) return;
        // 剩余-Vouches命令业务逻辑
    }

    // 精确匹配-Vouch命令
    if (command === "-Vouch") {
        // -Vouch命令业务逻辑
    }
})

该方案同时还方便后续扩展命令参数处理,适配性更强。

临时替代方案

如果你暂时不想调整整体命令匹配逻辑,也可以修改startsWith()判断条件,新增命令结束校验:

// 要求命令要么单独输入,要么后面紧跟空格加参数,避免匹配短命令
if (message.content.startsWith("-Vouches ") || message.content === "-Vouches") {
    // 原有逻辑
}

同时需要注意把更长的命令判断放在更靠前的位置,且每个命令判断执行完成后直接return中断后续逻辑,避免同时命中多个判断分支。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:04