Java源码示例:net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent

示例1
void onGuildMessageUpdate(GuildMessageUpdateEvent event) {
    if (topicContains(event.getChannel(), PROFANITY_FILTER_DISABLE_FLAG)) {
        return;
    }

    this.handlerThread.submit(() -> {
        final DunctebotGuild guild = new DunctebotGuild(event.getGuild(), variables);
        final GuildSettings settings = guild.getSettings();

        if (guild.getSelfMember().hasPermission(Permission.MESSAGE_MANAGE) &&
            !Objects.requireNonNull(event.getMember()).hasPermission(Permission.MESSAGE_MANAGE)) {

            if (blacklistedWordCheck(guild, event.getMessage(), event.getMember(), settings.getBlacklistedWords())) {
                return;
            }

            checkSwearFilter(event.getMessage(), event, guild);
        }
    });
}
 
示例2
@Override
public void onEvent(@Nonnull GenericEvent event) {
    if (event instanceof ReadyEvent) {
        this.onReady((ReadyEvent) event);
    } else if (event instanceof GuildMessageUpdateEvent) {
        this.onGuildMessageUpdate((GuildMessageUpdateEvent) event);
    } else if (event instanceof GuildMessageReceivedEvent) {
        this.onGuildMessageReceived((GuildMessageReceivedEvent) event);
    }
}
 
示例3
@Override
public void onGuildMessageUpdate(GuildMessageUpdateEvent event) {
    if (!event.getAuthor().isBot()) {
        historyService.onMessageUpdate(event.getMessage());
    }
}
 
示例4
private void logEdit(GuildMessageUpdateEvent event) {
    try {
        String hour = df.format(new Date(System.currentTimeMillis()));
        final ManagedDatabase db = MantaroData.db();
        final GuildData guildData = db.getGuild(event.getGuild()).getData();
        String logChannel = guildData.getGuildLogChannel();

        if (logChannel != null) {
            TextChannel tc = event.getGuild().getTextChannelById(logChannel);
            if (tc == null)
                return;

            User author = event.getAuthor();
            CachedMessage editedMessage = messageCache.get(event.getMessage().getIdLong(), Optional::empty).orElse(null);

            if (editedMessage != null && !editedMessage.getContent().isEmpty() && !event.getChannel().getId().equals(logChannel)) {
                //Update message in cache in any case.
                messageCache.put(event.getMessage().getIdLong(), Optional.of(new CachedMessage(event.getAuthor().getIdLong(), event.getMessage().getContentDisplay())));

                if (guildData.getLogExcludedChannels().contains(event.getChannel().getId())) {
                    return;
                }

                if (guildData.getModlogBlacklistedPeople().contains(editedMessage.getAuthor().getId())) {
                    return;
                }

                //Don't log if content is equal but update in cache (cc: message is still relevant).
                if (event.getMessage().getContentDisplay().equals(editedMessage.getContent()))
                    return;

                if (!guildData.getModLogBlacklistWords().isEmpty()) {
                    //This is not efficient at all I'm pretty sure, is there a better way?
                    List<String> splitMessage = Arrays.asList(editedMessage.getContent().split("\\s+"));
                    if (guildData.getModLogBlacklistWords().stream().anyMatch(splitMessage::contains)) {
                        return;
                    }
                }

                String message;
                if (guildData.getEditMessageLog() != null) {
                    message = new DynamicModifiers()
                            .set("hour", hour)
                            .set("old", editedMessage.getContent().replace("```", ""))
                            .set("new", event.getMessage().getContentDisplay().replace("```", ""))
                            .mapEvent("event", event)
                            .mapChannel("event.channel", event.getChannel())
                            .mapUser("event.user", editedMessage.getAuthor())
                            .mapMessage("event.message", event.getMessage())
                            .resolve(guildData.getEditMessageLog());
                } else {
                    message = String.format(EmoteReference.WARNING + "`[%s]` Message (ID: %s) created by **%s#%s** in channel **%s** was modified.\n```diff\n-%s\n+%s```",
                            hour, event.getMessage().getId(), author.getName(), author.getDiscriminator(), event.getChannel().getName(), editedMessage.getContent().replace("```", ""), event.getMessage().getContentDisplay().replace("```", ""));
                }

                tc.sendMessage(message).queue();

                logTotal++;
            }
        }
    } catch (Exception e) {
        if (!(e instanceof NullPointerException) && !(e instanceof IllegalArgumentException) && !(e instanceof CacheLoader.InvalidCacheLoadException) && !(e instanceof PermissionException)) {
            log.warn("Unexpected error while logging a edit.", e);
        }
    }
}
 
示例5
private Long handleMessage(DataObject content)
{
    Message message;
    try
    {
        message = getJDA().getEntityBuilder().createMessage(content);
    }
    catch (IllegalArgumentException e)
    {
        switch (e.getMessage())
        {
            case EntityBuilder.MISSING_CHANNEL:
            {
                final long channelId = content.getLong("channel_id");
                getJDA().getEventCache().cache(EventCache.Type.CHANNEL, channelId, responseNumber, allContent, this::handle);
                EventCache.LOG.debug("Received a message update for a channel that JDA does not currently have cached");
                return null;
            }
            case EntityBuilder.MISSING_USER:
            {
                final long authorId = content.getObject("author").getLong("id");
                getJDA().getEventCache().cache(EventCache.Type.USER, authorId, responseNumber, allContent, this::handle);
                EventCache.LOG.debug("Received a message update for a user that JDA does not currently have cached");
                return null;
            }
            default:
                throw e;
        }
    }

    switch (message.getChannelType())
    {
        case TEXT:
        {
            TextChannel channel = message.getTextChannel();
            if (getJDA().getGuildSetupController().isLocked(channel.getGuild().getIdLong()))
                return channel.getGuild().getIdLong();
            getJDA().handleEvent(
                    new GuildMessageUpdateEvent(
                            getJDA(), responseNumber,
                            message));
            break;
        }
        case PRIVATE:
        {
            getJDA().handleEvent(
                    new PrivateMessageUpdateEvent(
                            getJDA(), responseNumber,
                            message));
            break;
        }
        case GROUP:
        {
            WebSocketClient.LOG.warn("Received a MESSAGE_UPDATE for a group which is not supported");
            break;
        }

        default:
            WebSocketClient.LOG.warn("Received a MESSAGE_UPDATE with a unknown MessageChannel ChannelType. JSON: {}", content);
            return null;
    }

    //Combo event
    getJDA().handleEvent(
            new MessageUpdateEvent(
                    getJDA(), responseNumber,
                    message));
    return null;
}