【问题标题】:How can I tell if a sent message is the author's first?如何判断发送的消息是否是作者的第一条消息?
【发布时间】:2020-10-30 05:42:04
【问题描述】:

我目前正在制作一个机器人,通过在作者的第一条消息之后立即发送消息来欢迎新用户。澄清一下:

  1. 用户加入
  2. 用户发送第一条消息
  3. 函数被调用

如何确定作者之前是否在公会中发过消息?
我现在唯一的想法就是为每个新成员(sqlite)添加一行,当他们发送消息时,行将被删除,机器人可以欢迎用户。

【问题讨论】:

  • 是的,您需要一个数据库,我认为 discord 不会记录您在每个公会中发送的消息数量,至少我在 discord.js 文档中没有找到任何内容
  • 但它确实会跟踪频道中的所有消息。
  • @Giuliopime 你能回答一下吗?

标签: node.js discord.js


【解决方案1】:

幸运的是,我们可以获取所有频道,然后从频道中获取消息:

client.on('message', async message => {
  let totalUserMessages = 0;
  let txtChannels = Array.from(message.guild.channels.cache.filter(c => c.type === 'text').values());
  for (var i = 0; i < txtChannels.length; i++) {
    let channel = txtChannels[i];
    let messages = await channel.messages.fetch();
    let userMessages = messages.filter(m => m.author.id === message.author.id);
    let numOfMessages = Array.from((userMessages).values()).length;
    console.log(numOfMessages);
    totalUserMessages += numOfMessages;
  }

  console.log(totalUserMessages);
  if (totalUserMessages === 1) {
    // do stuff here
  }
});

【讨论】:

  • 如果我错了,请纠正我,但是使用数据库不会比这更快吗?公会有超过一百万条消息需要循环播放 - 请参阅comparison here
  • 当然会——我也会使用数据库。我只是想为这个问题想出一个解决方案。可悲的是,没有 member.firstMessage,message.member.lastMessage 只是返回当前消息。
【解决方案2】:

是的,您需要一个数据库,我认为 discord 不会记录您在每个公会中发送的消息数量,至少我在 discord.js 文档中没有找到任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-27
    • 2020-05-13
    • 2010-12-19
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多