首页 > 解决方案 > JDA:如何检测成员是如何从公会中移除的?

问题描述

我想在成员被踢时发送消息,如果他被禁止,我想发送消息。

所以在 JDA 的文档中,onGuildMemberRemove 事件包括 Kick、Ban 和 Normal Leave。

    @Override
    public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {

    }

但是我现在应该如何检测成员何时被禁止或被踢?

标签: javaeventsdiscord-jda

解决方案


您可以使用retrieveAuditLogs并检查用户最近是否被禁止或踢出目标。

例子:

@Override
public void onGuildMemberRemove(GuildMemberRemoveEvent event) {
  event.getGuild()
       .retrieveAuditLogs()
       .queueAfter(1, TimeUnit.SECONDS, (logs) -> { // Gotta wait a second for discord to populate the logs properly
         boolean isBan = false, isKick = false;
         for (AuditLogEntry log : logs) {
             if (log.getTargetIdLong() == event.getUser().getIdLong()) {
                 isBan = log.getType() == ActionType.BAN;
                 isKick = log.getType() == ActionType.KICK;
                 break;
             }
         }
         ... code here
       });
}

推荐阅读