【问题标题】:Get last message sent to channel获取发送到频道的最后一条消息
【发布时间】:2019-05-10 20:01:10
【问题描述】:

我已经有一个包含特定频道的变量,但是如何获取发送到该频道的最后一条消息?我想让我的机器人仅在发送到频道的最后一条消息不是由它发出时才执行操作。

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    如果您已经将特定频道存储在一个变量中,这很容易。您可以在该特定频道上调用MessageManager#fetch() 方法并获取最新消息。

    例子:

    let channel // <-- your pre-filled channel variable
    
    channel.messages.fetch({ limit: 1 }).then(messages => {
      let lastMessage = messages.first();
      
      if (!lastMessage.author.bot) {
        // The author of the last message wasn't a bot
      }
    })
    .catch(console.error);
    

     

    但是,如果您没有将完整的频道对象保存在变量中而只有频道 ID,则需要先获取正确的频道:

    let channel = bot.channels.get("ID of the channel here");
    

    【讨论】:

      【解决方案2】:

      最近我相信他们已经从channel.fetchMessages() 变成了channel.messages.fetch()

      channel.messages.fetch({ limit: 1 }).then(messages => {
        let lastMessage = messages.first();
      
        // do what you need with lastMessage below
      
      })
      .catch(console.error);
      

      【讨论】:

        【解决方案3】:

        有一个属性包含最后一条写入消息的对象。所以获取最后一条消息的最简短版本是:

        let lm = channel.lastMessage;
        

        当然@Tyler 的版本仍然有效。但是我的 IDE 说他不知道first()。那么这可能有一天会被弃用吗?!?我不知道。

        无论如何,在这两种方式中,您都可以检索消息的对象。如果你想拥有例如你可以这样做的文本

        let msgText = lm.content; // channel.lastMessage.content works as well
        

        【讨论】:

        • 嗨,我正在尝试使用此属性lastMessage 获取最后一条消息。但是这个属性是空的(而lastMessageID 不是)。我需要拿东西吗?现在我正在使用const guildChannel: GuildChannel = guild.channels.cache.get(ID) 获取频道
        • 你试过 Tylers 获取方法吗?但要回答这个问题,我必须自己测试并调试结果。
        猜你喜欢
        • 2018-04-20
        • 2021-01-19
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-10
        • 2018-09-05
        • 1970-01-01
        • 2019-02-12
        相关资源
        最近更新 更多