Search in sources :

Example 1 with PermissionOverrideDeleteEvent

use of net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent in project JDA by DV8FromTheWorld.

the class ChannelUpdateHandler method applyPermissions.

private void applyPermissions(IPermissionContainerMixin<?> channel, DataArray permOverwrites) {
    TLongObjectMap<PermissionOverride> currentOverrides = new TLongObjectHashMap<>(channel.getPermissionOverrideMap());
    List<IPermissionHolder> changed = new ArrayList<>(currentOverrides.size());
    Guild guild = channel.getGuild();
    for (int i = 0; i < permOverwrites.length(); i++) {
        DataObject overrideJson = permOverwrites.getObject(i);
        long id = overrideJson.getUnsignedLong("id", 0);
        if (handlePermissionOverride(currentOverrides.remove(id), overrideJson, id, channel))
            addPermissionHolder(changed, guild, id);
    }
    currentOverrides.forEachValue(override -> {
        channel.getPermissionOverrideMap().remove(override.getIdLong());
        addPermissionHolder(changed, guild, override.getIdLong());
        api.handleEvent(new PermissionOverrideDeleteEvent(api, responseNumber, channel, override));
        return true;
    });
}
Also used : DataObject(net.dv8tion.jda.api.utils.data.DataObject) ArrayList(java.util.ArrayList) TLongObjectHashMap(gnu.trove.map.hash.TLongObjectHashMap) PermissionOverrideDeleteEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent)

Example 2 with PermissionOverrideDeleteEvent

use of net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent in project JDA by DV8FromTheWorld.

the class ChannelUpdateHandler method handlePermissionOverride.

// True => override status changed (created/deleted/updated)
// False => nothing changed, ignore
private boolean handlePermissionOverride(PermissionOverride currentOverride, DataObject override, long overrideId, IPermissionContainerMixin<?> channel) {
    final long allow = override.getLong("allow");
    final long deny = override.getLong("deny");
    final int type = override.getInt("type");
    final boolean isRole = type == 0;
    if (!isRole) {
        if (type != 1) {
            EntityBuilder.LOG.debug("Ignoring unknown invite of type '{}'. JSON: {}", type, override);
            return false;
        } else if (!api.isCacheFlagSet(CacheFlag.MEMBER_OVERRIDES) && overrideId != api.getSelfUser().getIdLong()) {
            return false;
        }
    }
    if (// Permissions were updated?
    currentOverride != null) {
        long oldAllow = currentOverride.getAllowedRaw();
        long oldDeny = currentOverride.getDeniedRaw();
        PermissionOverrideImpl impl = (PermissionOverrideImpl) currentOverride;
        if (oldAllow == allow && oldDeny == deny)
            return false;
        if (overrideId == channel.getGuild().getIdLong() && (allow | deny) == 0L) {
            // We delete empty overrides for the @everyone role because that's what the client also does, otherwise our sync checks don't work!
            channel.getPermissionOverrideMap().remove(overrideId);
            api.handleEvent(new PermissionOverrideDeleteEvent(api, responseNumber, channel, currentOverride));
            return true;
        }
        impl.setAllow(allow);
        impl.setDeny(deny);
        api.handleEvent(new PermissionOverrideUpdateEvent(api, responseNumber, channel, currentOverride, oldAllow, oldDeny));
    } else // New override?
    {
        // Empty @everyone overrides should be treated as not existing at all
        if (overrideId == channel.getGuild().getIdLong() && (allow | deny) == 0L)
            return false;
        PermissionOverrideImpl impl;
        currentOverride = impl = new PermissionOverrideImpl(channel, overrideId, isRole);
        impl.setAllow(allow);
        impl.setDeny(deny);
        channel.getPermissionOverrideMap().put(overrideId, currentOverride);
        api.handleEvent(new PermissionOverrideCreateEvent(api, responseNumber, channel, currentOverride));
    }
    return true;
}
Also used : PermissionOverrideCreateEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent) PermissionOverrideDeleteEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent) PermissionOverrideUpdateEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideUpdateEvent)

Example 3 with PermissionOverrideDeleteEvent

use of net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent in project Sx4 by sx4-discord-bot.

the class LoggerHandler method onPermissionOverrideDelete.

public void onPermissionOverrideDelete(PermissionOverrideDeleteEvent event) {
    Guild guild = event.getGuild();
    GuildChannel channel = event.getChannel();
    ChannelType channelType = event.getChannelType();
    Member member = event.getMember();
    Role role = event.getRole();
    boolean roleOverride = event.isRoleOverride();
    LoggerEvent loggerEvent = channelType == ChannelType.CATEGORY ? LoggerEvent.CATEGORY_OVERRIDE_DELETE : channelType == ChannelType.STORE ? LoggerEvent.STORE_CHANNEL_OVERRIDE_DELETE : channelType == ChannelType.VOICE ? LoggerEvent.VOICE_CHANNEL_OVERRIDE_DELETE : LoggerEvent.TEXT_CHANNEL_OVERRIDE_DELETE;
    LoggerContext loggerContext = new LoggerContext().setUser(roleOverride ? 0L : member.getIdLong()).setRole(roleOverride ? role.getIdLong() : 0L).setChannel(channel);
    WebhookEmbedBuilder embed = new WebhookEmbedBuilder();
    embed.setColor(this.bot.getConfig().getRed());
    embed.setTimestamp(Instant.now());
    embed.setAuthor(new EmbedAuthor(guild.getName(), guild.getIconUrl(), null));
    embed.setFooter(new EmbedFooter(String.format("%s ID: %s", roleOverride ? "Role" : "User", event.getPermissionHolder().getIdLong()), null));
    // wait for member leave or role delete event if needed
    this.delay(() -> {
        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;
            }
            boolean deleted = (roleOverride ? event.getRole() : event.getMember()) == null;
            StringBuilder description = new StringBuilder(String.format("The %s %s has had permission overrides deleted for %s", LoggerUtility.getChannelTypeReadable(channelType), channelType == ChannelType.CATEGORY ? "`" + channel.getName() + "`" : channel.getAsMention(), roleOverride ? (deleted ? "`" + role.getName() + "`" : role.getAsMention()) : "`" + member.getEffectiveName() + "`"));
            if (deleted) {
                description.append(String.format(" by **%s**", roleOverride ? "role deletion" : "member leave"));
            }
            if (!deleted && guild.getSelfMember().hasPermission(Permission.VIEW_AUDIT_LOGS)) {
                this.retrieveAuditLogs(guild, ActionType.CHANNEL_OVERRIDE_DELETE).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()).map(AuditLogEntry::getUser).findFirst().orElse(null);
                    if (moderator != null) {
                        loggerContext.setModerator(moderator);
                        description.append(String.format(" by **%s**", moderator.getAsTag()));
                    }
                    embed.setDescription(description.toString());
                    this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
                });
            } else {
                embed.setDescription(description.toString());
                this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
            }
        });
    });
}
Also used : MessageBulkDeleteEvent(net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent) Document(org.bson.Document) PermissionOverrideCreateEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent) RoleCreateEvent(net.dv8tion.jda.api.events.role.RoleCreateEvent) StoreChannelDeleteEvent(net.dv8tion.jda.api.events.channel.store.StoreChannelDeleteEvent) Permission(net.dv8tion.jda.api.Permission) ZonedDateTime(java.time.ZonedDateTime) Aggregates(com.mongodb.client.model.Aggregates) EmoteUpdateRolesEvent(net.dv8tion.jda.api.events.emote.update.EmoteUpdateRolesEvent) AuditLogChange(net.dv8tion.jda.api.audit.AuditLogChange) CategoryCreateEvent(net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent) LoggerManager(com.sx4.bot.managers.LoggerManager) ColourUtility(com.sx4.bot.utility.ColourUtility) TextChannelDeleteEvent(net.dv8tion.jda.api.events.channel.text.TextChannelDeleteEvent) EmoteAddedEvent(net.dv8tion.jda.api.events.emote.EmoteAddedEvent) TextChannelUpdateNameEvent(net.dv8tion.jda.api.events.channel.text.update.TextChannelUpdateNameEvent) TextChannelCreateEvent(net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent) Duration(java.time.Duration) GenericEvent(net.dv8tion.jda.api.events.GenericEvent) ZoneOffset(java.time.ZoneOffset) LoggerContext(com.sx4.bot.entities.management.LoggerContext) LoggerEvent(com.sx4.bot.entities.management.LoggerEvent) AuditLogKey(net.dv8tion.jda.api.audit.AuditLogKey) PermissionOverrideDeleteEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent) EmbedFooter(club.minnced.discord.webhook.send.WebhookEmbed.EmbedFooter) GuildMessageUpdateEvent(net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent) java.util.concurrent(java.util.concurrent) EmoteUpdateNameEvent(net.dv8tion.jda.api.events.emote.update.EmoteUpdateNameEvent) CategoryDeleteEvent(net.dv8tion.jda.api.events.channel.category.CategoryDeleteEvent) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) GuildBanEvent(net.dv8tion.jda.api.events.guild.GuildBanEvent) GuildMemberRemoveEvent(net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent) EventListener(net.dv8tion.jda.api.hooks.EventListener) CategoryUpdateNameEvent(net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent) GuildMemberUpdateNicknameEvent(net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateNicknameEvent) NotNull(org.jetbrains.annotations.NotNull) RoleUpdateColorEvent(net.dv8tion.jda.api.events.role.update.RoleUpdateColorEvent) ActionType(net.dv8tion.jda.api.audit.ActionType) net.dv8tion.jda.api.entities(net.dv8tion.jda.api.entities) VoiceChannelUpdateNameEvent(net.dv8tion.jda.api.events.channel.voice.update.VoiceChannelUpdateNameEvent) java.util(java.util) JDA(net.dv8tion.jda.api.JDA) EmbedAuthor(club.minnced.discord.webhook.send.WebhookEmbed.EmbedAuthor) GuildMemberRoleRemoveEvent(net.dv8tion.jda.api.events.guild.member.GuildMemberRoleRemoveEvent) RoleUpdatePermissionsEvent(net.dv8tion.jda.api.events.role.update.RoleUpdatePermissionsEvent) VoiceChannelDeleteEvent(net.dv8tion.jda.api.events.channel.voice.VoiceChannelDeleteEvent) Projections(com.mongodb.client.model.Projections) MongoDatabase(com.sx4.bot.database.mongo.MongoDatabase) TLongIntHashMap(gnu.trove.map.hash.TLongIntHashMap) EmbedField(club.minnced.discord.webhook.send.WebhookEmbed.EmbedField) AuditLogEntry(net.dv8tion.jda.api.audit.AuditLogEntry) Filters(com.mongodb.client.model.Filters) GuildMessageDeleteEvent(net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent) Bson(org.bson.conversions.Bson) Pair(net.dv8tion.jda.internal.utils.tuple.Pair) WebhookEmbedBuilder(club.minnced.discord.webhook.send.WebhookEmbedBuilder) Sx4(com.sx4.bot.core.Sx4) GuildMemberRoleAddEvent(net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent) WebhookEmbed(club.minnced.discord.webhook.send.WebhookEmbed) EmoteRemovedEvent(net.dv8tion.jda.api.events.emote.EmoteRemovedEvent) Operators(com.sx4.bot.database.mongo.model.Operators) Accumulators(com.mongodb.client.model.Accumulators) TLongIntMap(gnu.trove.map.TLongIntMap) VoiceChannelCreateEvent(net.dv8tion.jda.api.events.channel.voice.VoiceChannelCreateEvent) LoggerUtility(com.sx4.bot.utility.LoggerUtility) RoleUpdateNameEvent(net.dv8tion.jda.api.events.role.update.RoleUpdateNameEvent) StoreChannelUpdateNameEvent(net.dv8tion.jda.api.events.channel.store.update.StoreChannelUpdateNameEvent) TLongObjectHashMap(gnu.trove.map.hash.TLongObjectHashMap) OkHttpClient(okhttp3.OkHttpClient) PermissionOverrideUpdateEvent(net.dv8tion.jda.api.events.guild.override.PermissionOverrideUpdateEvent) net.dv8tion.jda.api.events.guild.voice(net.dv8tion.jda.api.events.guild.voice) StoreChannelCreateEvent(net.dv8tion.jda.api.events.channel.store.StoreChannelCreateEvent) GuildMessage(com.sx4.bot.entities.cache.GuildMessage) GuildUnbanEvent(net.dv8tion.jda.api.events.guild.GuildUnbanEvent) TLongObjectMap(gnu.trove.map.TLongObjectMap) RoleDeleteEvent(net.dv8tion.jda.api.events.role.RoleDeleteEvent) ExceptionUtility(com.sx4.bot.utility.ExceptionUtility) StringUtility(com.sx4.bot.utility.StringUtility) GuildMemberJoinEvent(net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent) LoggerEvent(com.sx4.bot.entities.management.LoggerEvent) Document(org.bson.Document) LoggerContext(com.sx4.bot.entities.management.LoggerContext) EmbedFooter(club.minnced.discord.webhook.send.WebhookEmbed.EmbedFooter) EmbedAuthor(club.minnced.discord.webhook.send.WebhookEmbed.EmbedAuthor) WebhookEmbedBuilder(club.minnced.discord.webhook.send.WebhookEmbedBuilder)

Aggregations

TLongObjectHashMap (gnu.trove.map.hash.TLongObjectHashMap)2 PermissionOverrideDeleteEvent (net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent)2 WebhookEmbed (club.minnced.discord.webhook.send.WebhookEmbed)1 EmbedAuthor (club.minnced.discord.webhook.send.WebhookEmbed.EmbedAuthor)1 EmbedField (club.minnced.discord.webhook.send.WebhookEmbed.EmbedField)1 EmbedFooter (club.minnced.discord.webhook.send.WebhookEmbed.EmbedFooter)1 WebhookEmbedBuilder (club.minnced.discord.webhook.send.WebhookEmbedBuilder)1 Accumulators (com.mongodb.client.model.Accumulators)1 Aggregates (com.mongodb.client.model.Aggregates)1 Filters (com.mongodb.client.model.Filters)1 Projections (com.mongodb.client.model.Projections)1 Sx4 (com.sx4.bot.core.Sx4)1 MongoDatabase (com.sx4.bot.database.mongo.MongoDatabase)1 Operators (com.sx4.bot.database.mongo.model.Operators)1 GuildMessage (com.sx4.bot.entities.cache.GuildMessage)1 LoggerContext (com.sx4.bot.entities.management.LoggerContext)1 LoggerEvent (com.sx4.bot.entities.management.LoggerEvent)1 LoggerManager (com.sx4.bot.managers.LoggerManager)1 ColourUtility (com.sx4.bot.utility.ColourUtility)1 ExceptionUtility (com.sx4.bot.utility.ExceptionUtility)1