JDA:如何检测成员是如何从公会中被移除的?
JDA: How to detect how a Member got removed from the guild?
我想在会员被踢时发送消息,而在他被禁止时发送消息。
因此在 JDA 站的文档中,onGuildMemberRemove 事件包括踢出、禁止和正常离开。
@Override
public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {
}
但是我现在应该如何检测会员何时被禁止或踢出?
实现此目的的唯一方法是使用机器人进行踢出或禁止,因为您无法使用 GuildMemberRemoveEvent
.[= 区分用户被踢出或禁止或离开 'normally'。 12=]
要检测禁令,您可以使用 GuildBanEvent
,但请注意,这并不一定表示用户确实已从服务器中删除。
如果您使用机器人踢出和禁止用户,您可以在每次发出踢出或禁止命令时发送自定义消息。如果用户离开并且它不是命令的主题,您可以改为发送普通消息。
您可以使用 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
});
}
我想在会员被踢时发送消息,而在他被禁止时发送消息。
因此在 JDA 站的文档中,onGuildMemberRemove 事件包括踢出、禁止和正常离开。
@Override
public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {
}
但是我现在应该如何检测会员何时被禁止或踢出?
实现此目的的唯一方法是使用机器人进行踢出或禁止,因为您无法使用 GuildMemberRemoveEvent
.[= 区分用户被踢出或禁止或离开 'normally'。 12=]
要检测禁令,您可以使用 GuildBanEvent
,但请注意,这并不一定表示用户确实已从服务器中删除。
如果您使用机器人踢出和禁止用户,您可以在每次发出踢出或禁止命令时发送自定义消息。如果用户离开并且它不是命令的主题,您可以改为发送普通消息。
您可以使用 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
});
}