【问题标题】:Check if someone sent the message twice检查是否有人发送了两次消息
【发布时间】:2022-01-07 04:06:13
【问题描述】:

在我的服务器上,我们只有一个词的频道,"Oi"

如果有人发送的不是"Oi" 这个词,它就会被删除。但是现在我需要一个代码,如果有人连续发送两次消息,它会删除该消息。如果他们想发送,他们必须等待其他人发送。

这是我当前的代码,如果您出于某种原因想查看它:

if (message.channel.id === "ChannelIdWhichImNotGonnaTell") {
  if (message.content === "Oi") {
    let log = client.channels.cache.get("ChannelIdWhichImNotGonnaTell")
    log.send(`New Oi By ${message.author.tag}`)
  } else {
    message.delete()
  }
}

【问题讨论】:

  • 嘿@MADMENTAL,我试图在下面为您提供答案。你有机会去看看吗?有意义吗?如果回答有用,请点击其左侧的点赞按钮(▲)。如果它回答了您的问题,请单击复选标记 (✓) 接受它。这样别人就知道它有效。另见What should I do when someone answers my question?

标签: javascript node.js discord discord.js


【解决方案1】:

您可以使用limit option fetch() 最后两条消息,返回集合中的last() 将是频道中的倒数第二条消息(最后一条触发您的代码之前的一条)。

然后你可以比较author的ID;如果它们相同,您可以删除该消息:

if (message.channel.id === oiChannelID) {
  if (message.content === 'Oi') {
    // fetch the last two messages
    // this includes this one and the previous one too
    let lastMessages = await message.channel.messages.fetch({ limit: 2 });
    // this is the message sent before the one triggered this command
    let previousMessage = lastMessages.last();

    if (previousMessage.author.id === message.author.id) {
      console.log('No two Ois, mate');
      message.delete();
      // don't execute the rest of the code
      return;
    }

    let log = client.channels.cache.get(logChannelID);
    log.send(`New Oi By ${message.author.tag}`);
  } else {
    message.delete();
  }
}

【讨论】:

    【解决方案2】:

    有一些解决方法。但我发现这是执行此操作的有效方法。

    正如您所说的“他们必须等待其他人发送 oi”,那么您应该在发送的“新消息”之前获取“旧消息”。并尝试获取用户 ID。然后将其与新消息一比较。

    这里是示例代码:

    if (message.content === 'Oi') {
    
        message.channel.messages.fetch({limit: 2})
        .then(map => {
        let messages = Array.from(map.values());
        let msg = messages[1];
        if (msg.author.id === message.author.id){
    
            message.delete();
            // do something
    
        } else {
    
           let log = client.channels.cache.get("ChannelID")
           log.send(`New Oi By ${message.author.tag}`)
    
        }}).catch(error => console.log("Error fetching messages in channel"));
    
    }
    

    它将“旧消息”作者用户 ID 与“新消息”作者用户 ID 进行比较。如果匹配的话。然后将其删除。

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2019-04-24
      • 2017-08-15
      • 1970-01-01
      • 2020-02-03
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多