当前位置: 首页 > 知识库问答 >
问题:

不一致js v13检查按钮是否已按下

公孙智
2023-03-14

有没有一种方法可以使用收集器/interactionCreate来检测用户是否已经在特定消息上按下了特定按钮?我尝试的一种方法是将其保存在这样的数组中

const alreadyPressed = []
const filter = m => m.customId === "No" && m.messageId === interaction.messageId && m.user.id === interaction.user.id;
collector = embedMsg.createMessageComponentCollector({filter: filter, time: 10000});//86400000

collector.on('collect', async i => {
    client.logger("collector1 collected")
    client.logger(alreadyPressed.indexOf(i.user.id, i.messageId))
    if (alreadyPressed.indexOf(i.user.id, i.messageId)) {
        return i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true })
    } else {
        i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true });
        alreadyPressed.push(i.user.id, i.messageId)
    }
});   
collector.on('end', collected => {
    client.logger(collected.size)
    // if (collected.size < 10) {
        
    // }
    delete alreadyPressed[0]
    delete alreadyPressed[1]
});

但是机器人最终总是以“你已经投票”作为回应,那么有什么可行的方法来检查这一点呢?

共有2个答案

丁嘉
2023-03-14

您使用的是数组#indexOf(),如果未找到它,它将返回-1(JavaScript将其视为真实值)。我还建议您将值放入一个对象或其自己的数组(按下时)

const alreadyPressed = []
// ...
collector.on('collect', async i => {
    // logs
    if (alreadyPressed.includes({userID: i.user.id, messageID: i.messageId})) {
        return i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true })
    } else {
        i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true });
        alreadyPressed.push({userID: i.user.id, messageID: i.messageId})
    }
})
颛孙哲
2023-03-14

正如mr Mythical所说,Array#indexOf()将只返回-1,因为它找不到它,我尝试了一下,发现在数组中使用和存储值可能是您想要的。我也把它们放在一起,因为不需要把它们分开,然后我使用. fin()搜索数组,如果它匹配用户ID和按钮打开的消息的ID。这将是一种可行的方法

const alreadyPressed = []
const filter = m => m.customId === "No"
collector = embedMsg.createMessageComponentCollector({filter: filter, time: 10000});//86400000

collector.on('collect', async i => {
    if (!!alreadyPressed.find(id => {  
        return id.ID === i.user.id+i.message.id
      })) {
        i.reply({ content: `You've already voted ${i.user.username}!`, ephemeral: true })
      } else {
        i.reply({ content: `Thank you for your vote ${i.user.username}!`, ephemeral: true });
        alreadyPressed.push({ID: i.user.id+i.message.id})
    }
});   
collector.on('end', collected => {
    client.logger(collected.size)
    // if (collected.size < 10) {
        
    // }
    delete alreadyPressed
});
 类似资料:
  • 问题内容: 有没有一种方法可以检测JavaScript中的鼠标按钮当前是否处于按下状态? 我知道“ mousedown”事件,但这不是我所需要的。按下鼠标按钮后的一段时间,我希望能够检测它是否仍被按下。 这可能吗? 问题答案: 关于Pax的解决方案:如果用户有意或无意地单击了多个按钮,则该按钮将不起作用。不要问我我怎么知道:-(。 正确的代码应如下所示: 通过这样的测试: 如果您想知道按下了什么按

  • 我希望我的程序只在所有按钮都被释放时发送0。现在,当我释放按钮时,代码会发送0,但如果我按住按钮并释放其中一个按钮,它会发送0,但我不希望它这样做,我只希望当所有按钮都被释放时。谢谢

  • 假设有几个以编程方式创建的按钮,并且有一个通用的按钮处理程序。 如何理解处理器内部哪个按钮被按下? 而不在函数调用中传递一些特殊的东西。那不行:< code > onButtonClicked(" button " I); 例如,在JavaScript中,在处理程序内部有< code>$(this),它可以立即“理解”按下了哪个按钮。 也许在颤振中也有类似的机制?我想在按钮上挂起属性(事先不知道哪

  • 问题内容: 在Java中,我有一个程序需要连续检查用户是否按下了键。所以在伪代码中,像 提前致谢! 问题答案: 在Java中,你不检查是否有键被按下,而不是你听到秒。实现目标的正确方法是注册一个,并实现它以维持所需密钥的状态: 然后,您可以随时使用: 当然,您可以使用相同的方法来实现键映射及其包裹在状态中的状态。

  • 我目前正在建立一个网站,通过JavaScript使用自定义快速导航。 如果用户按右键,他将被导航到“我的页面列表”中的下一页,通过按ALT Right或Left键,他可以在浏览器历史记录中前后导航。 这是我当前的代码: 这一切都很好,除了一个小问题:假设我想返回三页-如果我是一个有逻辑思维的人,我会先按ALT Left返回一个站点,然后当我在上一个站点上时,只需按住ALT,然后再次按Left返回一