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
相关产品推荐
相关产品推荐

