use of net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent in project SkyBot by duncte123.
the class MessageListener method onMessageBulkDelete.
@SuppressWarnings("PMD.UseConcurrentHashMap")
protected void onMessageBulkDelete(final MessageBulkDeleteEvent event) {
this.handlerThread.submit(() -> {
try {
final DunctebotGuild guild = new DunctebotGuild(event.getGuild(), variables);
if (!guild.getSettings().isMessageLogging()) {
// just delete the message here as we don't want to keep it around
this.redis.deleteMessages(event.getMessageIds());
return;
}
final List<MessageData> dataList = this.redis.getAndDeleteMessages(event.getMessageIds());
final StringBuilder builder = new StringBuilder();
// temporarily store the users to prevent spamming discord for the data
final Map<Long, User> tmpUsers = new HashMap<>();
final JDA jda = event.getJDA();
// reverse the list to preserve the correct order
Collections.reverse(dataList);
for (final MessageData data : dataList) {
final long authorId = data.getAuthorId();
final Consumer<User> userConsumer = (user) -> {
builder.append('[').append(data.getCratedAt().format(DateTimeFormatter.RFC_1123_DATE_TIME)).append("] (").append(user.getAsTag()).append(" - ").append(user.getIdLong()).append(") [").append(data.getMessageId()).append("]: ").append(data.getContent()).append('\n');
};
if (tmpUsers.containsKey(authorId)) {
userConsumer.accept(tmpUsers.get(authorId));
} else {
// try to fetch the user since we don't cache them
// calls are sequential making sure the messages are still in order
jda.retrieveUserById(authorId).queue((user) -> {
tmpUsers.put(authorId, user);
userConsumer.accept(user);
}, (error) -> userConsumer.accept(new UnknownUser(authorId)));
}
}
final TextChannel channel = event.getChannel();
final EmbedBuilder embed = EmbedUtils.embedField("Bulk Delete", "Bulk deleted messages from <#%s> are available in the attached file.".formatted(channel.getIdLong())).setColor(0xE67E22).setTimestamp(Instant.now());
modLog(new MessageConfig.Builder().addEmbed(true, embed).setActionConfig((action) -> action.addFile(builder.toString().getBytes(), "bulk_delete_%s.txt".formatted(System.currentTimeMillis()))), guild);
} catch (Exception e) {
LOGGER.error("Exception on message bulk delete", e);
}
});
}
use of net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent in project JDA by DV8FromTheWorld.
the class MessageBulkDeleteHandler method handleInternally.
@Override
protected Long handleInternally(DataObject content) {
if (!content.isNull("guild_id")) {
long guildId = content.getLong("guild_id");
if (getJDA().getGuildSetupController().isLocked(guildId))
return guildId;
}
final long channelId = content.getLong("channel_id");
if (getJDA().isBulkDeleteSplittingEnabled()) {
SocketHandler handler = getJDA().getClient().getHandlers().get("MESSAGE_DELETE");
content.getArray("ids").forEach(id -> {
handler.handle(responseNumber, DataObject.empty().put("t", "MESSAGE_DELETE").put("d", DataObject.empty().put("channel_id", Long.toUnsignedString(channelId)).put("id", id)));
});
} else {
// TODO-v5-unified-channel-cache
GuildMessageChannel channel = getJDA().getTextChannelById(channelId);
if (channel == null)
channel = getJDA().getNewsChannelById(channelId);
if (channel == null)
channel = getJDA().getThreadChannelById(channelId);
if (channel == null) {
getJDA().getEventCache().cache(EventCache.Type.CHANNEL, channelId, responseNumber, allContent, this::handle);
EventCache.LOG.debug("Received a Bulk Message Delete for a GuildMessageChannel that is not yet cached.");
return null;
}
if (getJDA().getGuildSetupController().isLocked(channel.getGuild().getIdLong()))
return channel.getGuild().getIdLong();
DataArray array = content.getArray("ids");
List<String> messages = array.stream(DataArray::getString).collect(Collectors.toList());
getJDA().handleEvent(new MessageBulkDeleteEvent(getJDA(), responseNumber, channel, messages));
}
return null;
}
use of net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent in project Sx4 by sx4-discord-bot.
the class LoggerHandler method onMessageBulkDelete.
public void onMessageBulkDelete(MessageBulkDeleteEvent event) {
List<String> messageIds = event.getMessageIds();
TextChannel textChannel = event.getChannel();
Guild guild = event.getGuild();
LoggerEvent loggerEvent = LoggerEvent.MESSAGE_DELETE;
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);
if (guild.getSelfMember().hasPermission(Permission.VIEW_AUDIT_LOGS)) {
this.retrieveAuditLogsDelayed(guild, ActionType.MESSAGE_BULK_DELETE).whenComplete((logs, auditException) -> {
this.messageCache.putIfAbsent(guild.getIdLong(), new TLongIntHashMap());
TLongIntMap guildCache = this.messageCache.get(guild.getIdLong());
AuditLogEntry entry = logs == null ? null : logs.stream().filter(e -> Duration.between(e.getTimeCreated(), ZonedDateTime.now(ZoneOffset.UTC)).toMinutes() <= 5).filter(e -> {
int count = Integer.parseInt(e.getOptionByName("count"));
int oldCount = guildCache.get(e.getIdLong());
guildCache.put(e.getIdLong(), count);
return (count == messageIds.size() && count != oldCount) || count > oldCount;
}).findFirst().orElse(null);
this.handleBulkMessages(textChannel, messageIds, data.getList("loggers", Document.class), loggerEvent, entry == null ? null : entry.getUser());
});
return;
}
this.handleBulkMessages(textChannel, messageIds, data.getList("loggers", Document.class), loggerEvent, null);
});
}
use of net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent in project Gary by help-chat.
the class LoggingHandler method execute.
@Override
protected void execute(GenericEvent event) {
switch(EventsEnum.fromEvent(event)) {
case MEMBER_JOIN:
GuildMemberJoinEvent e = (GuildMemberJoinEvent) event;
log(EventsEnum.MEMBER_JOIN, e.getJDA(), e.getGuild(), e.getUser());
break;
case MEMBER_LEAVE:
if (!wasBan) {
GuildMemberLeaveEvent e2 = (GuildMemberLeaveEvent) event;
log(EventsEnum.MEMBER_LEAVE, e2.getJDA(), e2.getGuild(), e2.getUser());
} else {
wasBan = false;
}
break;
case MEMBER_BANNED:
wasBan = true;
GuildBanEvent e3 = (GuildBanEvent) event;
log(EventsEnum.MEMBER_BANNED, e3.getJDA(), e3.getGuild(), e3.getUser());
break;
case MESSAGE_EDIT:
GuildMessageUpdateEvent e5 = (GuildMessageUpdateEvent) event;
if (!e5.getAuthor().isBot() && StringUtils.equalsIgnoreCase(e5.getChannel().getName(), Constants.CHANNELS)) {
log(EventsEnum.MESSAGE_EDIT, e5.getJDA(), e5.getGuild(), e5.getAuthor(), e5.getChannel(), e5.getMessage());
}
break;
case MESSAGE_DELETE:
GuildMessageDeleteEvent e6 = (GuildMessageDeleteEvent) event;
if ((StringUtils.equalsIgnoreCase(e6.getChannel().getName(), Constants.CHANNELS))) {
log(EventsEnum.MESSAGE_DELETE, e6.getJDA(), e6.getGuild(), MessageUtils.getAuthor(e6.getMessageIdLong()), e6.getChannel(), e6.getMessageIdLong(), MessageUtils.getMessage(e6.getMessageIdLong()));
}
break;
case MESSAGE_BULK_DELETE:
MessageBulkDeleteEvent e7 = (MessageBulkDeleteEvent) event;
if ((StringUtils.equalsIgnoreCase(e7.getChannel().getName(), Constants.CHANNELS))) {
log(EventsEnum.MESSAGE_BULK_DELETE, e7.getJDA(), e7.getGuild(), e7.getChannel(), e7.getMessageIds());
}
break;
case VOICE_JOIN:
GuildVoiceJoinEvent e8 = (GuildVoiceJoinEvent) event;
log(EventsEnum.VOICE_JOIN, e8.getJDA(), e8.getGuild(), e8.getMember().getUser(), e8.getChannelJoined());
break;
}
}
use of net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent in project SkyBot by DuncteBot.
the class MessageListener method onMessageBulkDelete.
@SuppressWarnings("PMD.UseConcurrentHashMap")
protected void onMessageBulkDelete(final MessageBulkDeleteEvent event) {
this.handlerThread.submit(() -> {
try {
final DunctebotGuild guild = new DunctebotGuild(event.getGuild(), variables);
if (!guild.getSettings().isMessageLogging()) {
// just delete the message here as we don't want to keep it around
this.redis.deleteMessages(event.getMessageIds());
return;
}
final List<MessageData> dataList = this.redis.getAndDeleteMessages(event.getMessageIds());
final StringBuilder builder = new StringBuilder();
// temporarily store the users to prevent spamming discord for the data
final Map<Long, User> tmpUsers = new HashMap<>();
final JDA jda = event.getJDA();
// reverse the list to preserve the correct order
Collections.reverse(dataList);
for (final MessageData data : dataList) {
final long authorId = data.getAuthorId();
final Consumer<User> userConsumer = (user) -> {
builder.append('[').append(data.getCratedAt().format(DateTimeFormatter.RFC_1123_DATE_TIME)).append("] (").append(user.getAsTag()).append(" - ").append(user.getIdLong()).append(") [").append(data.getMessageId()).append("]: ").append(data.getContent()).append('\n');
};
if (tmpUsers.containsKey(authorId)) {
userConsumer.accept(tmpUsers.get(authorId));
} else {
// try to fetch the user since we don't cache them
// calls are sequential making sure the messages are still in order
jda.retrieveUserById(authorId).queue((user) -> {
tmpUsers.put(authorId, user);
userConsumer.accept(user);
}, (error) -> userConsumer.accept(new UnknownUser(authorId)));
}
}
final TextChannel channel = event.getChannel();
final EmbedBuilder embed = EmbedUtils.embedField("Bulk Delete", "Bulk deleted messages from <#%s> are available in the attached file.".formatted(channel.getIdLong())).setColor(0xE67E22).setTimestamp(Instant.now());
modLog(new MessageConfig.Builder().addEmbed(true, embed).setActionConfig((action) -> action.addFile(builder.toString().getBytes(), "bulk_delete_%s.txt".formatted(System.currentTimeMillis()))), guild);
} catch (Exception e) {
LOGGER.error("Exception on message bulk delete", e);
}
});
}
Aggregations