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

discord.js按钮点击后收集数字判断等于1不生效问题

问题根因

判断分支始终不触发的核心错误:collection.first()返回的是完整的Discord消息对象,包含发送者信息、发送时间、附件、消息内容等多个属性,不是用户发送的纯文本内容。对象类型和字符串"1"做全等判断永远返回false,因此匹配逻辑永远不会执行。

修复方法

针对问题和代码隐患做以下调整即可:

  • 读取消息对象的.content属性拿到用户实际输入的文本,这是解决当前判断失效的核心
  • 异步发送提示消息时加await,避免提示消息未发送完成就开始等待用户输入的时序问题
  • 过滤器内的用户ID判断统一使用全等===,避免隐式类型转换导致的判断异常
  • 给拿到的用户输入加.trim()处理,兼容用户不小心输入前后空格的场景
  • 补充超时错误的catch逻辑,避免超时后抛出未捕获异常导致进程报错
  • 删除声明后从未使用的无效member变量,保持代码整洁
修复后完整代码
if(button.id === 'policeticket') {
    await button.channel.send("type a number");

    const filter = m => m.author.id === button.clicker.user.id;
    button.channel.awaitMessages(filter, { max: 1, time: 60000, errors: ['time'] })
    .then(async collection => {
        // 取消息文本内容,去除前后多余空白字符
        const inputContent = collection.first().content.trim(); 
        
        if(inputContent === "1") {
            await button.channel.send("test");
        }
    })
    .catch(() => {
        // 超时触发逻辑,可按需修改提示内容
        button.channel.send("输入等待超时,请重新点击按钮触发操作");
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:27:19