Discord.js 用kick/ban/Leave留下消息

Discord.js 用kick/ban/Leave留下消息,discord.js,Discord.js,如果用户离开、被禁止或被踢,我如何制作一条显示该用户离开的消息? 我已经试过用guildBanAdd和guildMemberRemove来做这件事了,它基本上是有效的——但是如果你被禁止,它会说你们都离开了,被禁止了,这不是我想要的。代码: // member got kicked/left the server bot.on('guildMemberRemove', async member => { const fetchedLogs1 = await member.guild.

如果用户离开、被禁止或被踢,我如何制作一条显示该用户离开的消息? 我已经试过用guildBanAdd和guildMemberRemove来做这件事了,它基本上是有效的——但是如果你被禁止,它会说你们都离开了,被禁止了,这不是我想要的。代码:

// member got kicked/left the server
bot.on('guildMemberRemove', async member => {

  const fetchedLogs1 = await member.guild.fetchAuditLogs({ // get audit log entry
      limit: 1,
      type: 'MEMBER_KICK',
  });
  const fetchedLogs2 = await member.guild.fetchAuditLogs({
        limit: 1,
        type: 'MEMBER_BAN_ADD',
    });

  const kickLog = fetchedLogs1.entries.first() // get the first log
  const banLog = fetchedLogs2.entries.first()

  if(kickLog.target.id != member.id || kickLog.createdAt < member.joinedAt){
    if(banLog.target.id != member.id || banLog.createdAt < member.joinedAt){
      return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send(member.user.tag+" left") // no log, so user left
    }
    else{
      return
    }
  }

  const { executor, target } = kickLog // get args

  if(!kickLog.createdAt < member.joinedAt){
    if(target.id === member.id) { // if the log is about the kicked member
      member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send(member.user.tag+" got kicked by "+executor.tag+", L") // user got kicked
    }
    else{
    }
  }

});

// member got banned
bot.on('guildBanAdd', async (guild, user) => {

    const fetchedLogs = await guild.fetchAuditLogs({
        limit: 1,
        type: 'MEMBER_BAN_ADD',
    });
    // Since we only have 1 audit log entry in this collection, we can simply grab the first one
    const banLog = fetchedLogs.entries.first()

    // Let's perform a coherence check here and make sure we got *something*
    if (!banLog) return guild.channels.cache.get(bsCBots.channels['entryway'].id).send(user.tag+" got banned") // user left idk

    // We now grab the user object of the person who banned the user
    // Let us also grab the target of this action to double check things
    const { executor, target } = banLog

    // And now we can update our output with a bit more information
    // We will also run a check to make sure the log we got was for the same kicked member
    if (target.id === user.id) {
        guild.channels.cache.get(bsCBots.channels['entryway'].id).send(target.tag+" got banned by "+executor.tag+", big fat L to you mister") // user left idk
  }
  else{
  }
  
});

它可以工作,但有时无法检测用户是否被禁止,它只是说只要在禁止列表中添加新的禁止,就会触发左侧的guildBanAdd,因此如果您只是删除代码中的这一部分,您应该会很好,guildMemberRemove可以像您所做的那样使用审核日志分类为kick/ban/leave。

Ehhh忘了它,我只走简单的路,没有踢/禁止的事情


但当然,如果你有答案,请随时发布

您可以查看审核日志。它会告诉你用户是被禁止还是被踢。是的,我就是这么做的,它不能正常工作。你可以删除GuildBanad,然后新的问题是,guildMemberRemove事件似乎在添加禁令之前触发,因此它并不总是显示用户被禁止。我将以另一种方式发送代码更正:被禁止的嵌入只发送一次,如果你再次禁止某人,它将不起作用
// member got kicked/left the server
bot.on('guildMemberRemove', async member => {

  const fetchedLogs1 = await member.guild.fetchAuditLogs({ // get audit log entry for kicks
      limit: 1,
      type: 'MEMBER_KICK',
  });
  const fetchedLogs2 = await member.guild.fetchAuditLogs({ // get audit log entry for bans
        limit: 1,
        type: 'MEMBER_BAN_ADD',
    });

  const kickLog = fetchedLogs1.entries.first() // get the first kick log
  const banLog = fetchedLogs2.entries.first() // get the first ban log

  if(kickLog.target.id === member.user.id && kickLog.createdAt > member.joinedAt){ // is the kick log valid?
    
    var reason = "*No reason provided*"

    if(kickLog.reason){
      reason = kickLog.reason
    }

    const embed = { // make embed
      "title": ":hiking_boot: GET OUT",
      "color": 11141120,
      "thumbnail": {
        "url": member.user.displayAvatarURL()
      },
      "fields": [
        {
          "name": member.user.tag,
          "value": "(id: "+member.user.id+")"
        },
        {
          "name": "Has been **KICKED** from the server by "+kickLog.executor.tag+" with reason:",
          "value": reason
        }
      ]
    };

    return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // user got kicked

  }
  else{ // kick log is not valid

    if(banLog.target.id === member.user.id && banLog.createdAt > member.joinedAt){ // is ban log valid?

      var reason = "*No reason provided*"

      if(banLog.reason){
        reason = banLog.reason
      }

      const embed = { // make embed
        "title": ":banHammer: DONT COME BACK",
        "color": 11141120,
        "thumbnail": {
          "url": member.user.displayAvatarURL()
        },
        "fields": [
          {
            "name": member.user.tag,
            "value": "(id: "+member.user.id+")"
          },
          {
            "name": "Has been ***BANNED*** from the server by "+banLog.executor.tag+" with reason:",
            "value": reason
          }
        ]
      };

      return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // user got banned

    }
    else{ // ban log not valid

      const embed = { // make embed
        "title": ":wave: Goodbye!",
        "color": 11141120,
        "thumbnail": {
          "url": member.user.displayAvatarURL()
        },
        "fields": [
          {
            "name": member.user.tag,
            "value": "(id: "+member.user.id+")"
          },
          {
            "name": "Has left the server",
            "value": "See you around!"
          }
        ]
      };

      return member.guild.channels.cache.get(bsCBots.channels['entryway'].id).send({ embed }) // no log, so user left

    }

  }

});