use of net.dv8tion.jda.api.audit.AuditLogChange in project Sx4 by sx4-discord-bot.
the class LoggerHandler method onPermissionOverrideUpdate.
public void onPermissionOverrideUpdate(PermissionOverrideUpdateEvent event) {
Guild guild = event.getGuild();
GuildChannel channel = event.getChannel();
IPermissionHolder permissionHolder = event.getPermissionHolder();
PermissionOverride permissionOverride = event.getPermissionOverride();
ChannelType channelType = event.getChannelType();
LoggerEvent loggerEvent = channelType == ChannelType.CATEGORY ? LoggerEvent.CATEGORY_OVERRIDE_CREATE : channelType == ChannelType.STORE ? LoggerEvent.STORE_CHANNEL_OVERRIDE_CREATE : channelType == ChannelType.VOICE ? LoggerEvent.VOICE_CHANNEL_OVERRIDE_CREATE : LoggerEvent.TEXT_CHANNEL_OVERRIDE_CREATE;
LoggerContext loggerContext = new LoggerContext().setUser(event.isMemberOverride() ? permissionHolder.getIdLong() : 0L).setRole(event.isRoleOverride() ? permissionHolder.getIdLong() : 0L).setChannel(channel);
String message = LoggerUtility.getPermissionOverrideDifference(event.getOldAllowRaw(), event.getOldInheritedRaw(), event.getOldDenyRaw(), permissionOverride);
StringBuilder description = new StringBuilder(String.format("The %s %s has had permission overrides updated for %s", LoggerUtility.getChannelTypeReadable(channelType), channelType == ChannelType.CATEGORY ? "`" + channel.getName() + "`" : channel.getAsMention(), event.isRoleOverride() ? event.getRole().getAsMention() : "`" + event.getMember().getEffectiveName() + "`"));
WebhookEmbedBuilder embed = new WebhookEmbedBuilder();
embed.setColor(this.bot.getConfig().getOrange());
embed.setTimestamp(Instant.now());
embed.setAuthor(new EmbedAuthor(guild.getName(), guild.getIconUrl(), null));
embed.setFooter(new EmbedFooter(String.format("%s ID: %s", event.isRoleOverride() ? "Role" : "User", permissionHolder.getIdLong()), null));
this.bot.getMongo().aggregateLoggers(this.getPipeline(guild.getIdLong())).whenComplete((documents, exception) -> {
if (ExceptionUtility.sendErrorMessage(exception)) {
return;
}
if (documents.isEmpty()) {
return;
}
Document data = documents.get(0);
List<Document> loggers = LoggerUtility.getValidLoggers(data.getList("loggers", Document.class), loggerEvent, loggerContext);
if (loggers.isEmpty()) {
return;
}
if (guild.getSelfMember().hasPermission(Permission.VIEW_AUDIT_LOGS)) {
this.retrieveAuditLogsDelayed(guild, ActionType.CHANNEL_OVERRIDE_CREATE).whenComplete((logs, auditException) -> {
User moderator = logs == null ? null : logs.stream().filter(e -> Duration.between(e.getTimeCreated(), ZonedDateTime.now(ZoneOffset.UTC)).toSeconds() <= 5).filter(e -> e.getTargetIdLong() == channel.getIdLong()).filter(e -> {
AuditLogChange allow = e.getChangeByKey("allow"), deny = e.getChangeByKey("deny");
Integer denyNewValue = deny == null ? null : deny.getNewValue(), denyOldValue = deny == null ? null : deny.getOldValue();
Integer allowNewValue = allow == null ? null : allow.getNewValue(), allowOldValue = allow == null ? null : allow.getOldValue();
int denyNew = denyNewValue == null ? (int) permissionOverride.getDeniedRaw() : denyNewValue, denyOld = denyOldValue == null ? (int) event.getOldDenyRaw() : denyOldValue;
int allowNew = allowNewValue == null ? (int) permissionOverride.getAllowedRaw() : allowNewValue, allowOld = allowOldValue == null ? (int) event.getOldAllowRaw() : allowOldValue;
return denyNew == permissionOverride.getDeniedRaw() && denyOld == event.getOldDenyRaw() && allowNew == permissionOverride.getAllowedRaw() && allowOld == event.getOldAllowRaw();
}).map(AuditLogEntry::getUser).findFirst().orElse(null);
if (moderator != null) {
loggerContext.setModerator(moderator);
description.append(String.format(" by **%s**", moderator.getAsTag()));
}
description.append(message);
embed.setDescription(description.toString());
this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
});
} else {
description.append(message);
embed.setDescription(description.toString());
this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
}
});
}
use of net.dv8tion.jda.api.audit.AuditLogChange in project IB.ai by ib-ai.
the class GuildListener method queryAuditLog.
/**
* Queries the audit logs to gain information about punishment handling.
* @param guild The guild.
* @param target The target member.
*/
private void queryAuditLog(Guild guild, long target, ActionType... actionTypes) {
executorService.schedule(() -> {
synchronized (mutex) {
guild.retrieveAuditLogs().limit(10).queue(entries -> {
if (entries.isEmpty()) {
IBai.INSTANCE.getLogger().info("No audit logs retrieved.");
return;
}
for (AuditLogEntry latest : entries) {
if (Arrays.stream(actionTypes).anyMatch(latest.getType()::equals) && latest.getTargetType() == TargetType.MEMBER && latest.getTargetIdLong() == target) {
IBai.INSTANCE.getLogger().info("Found audit log: type '{}', target type '{}', target id '{}', " + "user {}, options {}", latest.getType(), latest.getTargetType(), latest.getTargetId(), latest.getUser(), latest.getOptions());
guild.getJDA().retrieveUserById(latest.getTargetIdLong()).queue(user -> {
User staff = latest.getUser();
String reason = latest.getReason();
if (user == null || staff == null) {
IBai.INSTANCE.getLogger().info("User or Staff is null");
throw new RuntimeException("user/staff nil");
}
boolean redacted = false;
if (reason != null && (reason.toLowerCase().contains("-redacted") || reason.toLowerCase().contains("-redact"))) {
redacted = true;
reason = reason.replace("-redacted", "").replace("-redact", "");
}
// Temporary Shorthand for rule 5 bans
if (reason != null && reason.equalsIgnoreCase("-r5")) {
reason = "Rule 5. Academic Dishonesty is strictly prohibited.";
redacted = true;
}
Punishment punishment = new Punishment(null, user.getAsTag(), user.getId(), staff.getAsTag(), staff.getId(), reason, redacted);
PunishmentHandler handler = new PunishmentHandler(guild, punishment);
switch(latest.getType()) {
case KICK:
punishment.setType(PunishmentType.KICK);
handler.onPunish();
break;
case MEMBER_ROLE_UPDATE:
AuditLogChange rolesAddedRaw = latest.getChangeByKey(AuditLogKey.MEMBER_ROLES_ADD);
AuditLogChange rolesRemovedRaw = latest.getChangeByKey(AuditLogKey.MEMBER_ROLES_REMOVE);
if (rolesAddedRaw != null) {
if (staff.getIdLong() == guild.getJDA().getSelfUser().getIdLong()) {
IBai.INSTANCE.getLogger().info("Ignored adding role since it was sent by user " + "{} (self)", staff.getIdLong());
return;
}
List<Map<String, String>> roles = rolesAddedRaw.getNewValue();
if (isNotMute(guild, roles)) {
return;
}
punishment.setType(PunishmentType.MUTE);
handler.onPunish();
}
if (rolesRemovedRaw != null) {
List<Map<String, String>> roles = rolesRemovedRaw.getNewValue();
if (isNotMute(guild, roles)) {
return;
}
punishment.setType(PunishmentType.MUTE);
handler.onRevocation();
}
break;
case BAN:
IBai.INSTANCE.getLogger().info("Handling Ban");
punishment.setType(PunishmentType.BAN);
handler.onPunish();
break;
case UNBAN:
punishment.setType(PunishmentType.BAN);
handler.onRevocation();
break;
default:
break;
}
}, error -> {
IBai.INSTANCE.getLogger().info("Could not retrieve user.");
IBai.INSTANCE.getLogger().info(error.getMessage());
});
break;
}
}
}, error -> {
IBai.INSTANCE.getLogger().info("Blimey, there's been an error in the audit log.");
IBai.INSTANCE.getLogger().error(error.getMessage());
});
}
}, 3, TimeUnit.SECONDS);
}
Aggregations