use of net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent in project Sx4 by sx4-discord-bot.
the class LoggerHandler method onGuildMemberRemove.
public void onGuildMemberRemove(GuildMemberRemoveEvent event) {
Guild guild = event.getGuild();
User user = event.getUser();
Member member = event.getMember();
List<Role> roles = member == null ? Collections.emptyList() : member.getRoles();
String rolesMessage = StringUtility.joinLimited(", ", roles, Role::getAsMention, MessageEmbed.VALUE_MAX_LENGTH);
LoggerContext loggerContext = new LoggerContext().setUser(user);
WebhookEmbedBuilder embed = new WebhookEmbedBuilder();
embed.setDescription(String.format("`%s` just left the server", user.getName()));
embed.setColor(this.bot.getConfig().getRed());
embed.setTimestamp(Instant.now());
embed.setAuthor(new EmbedAuthor(user.getAsTag(), user.getEffectiveAvatarUrl(), null));
embed.setFooter(new EmbedFooter(String.format("User ID: %s", user.getId()), null));
if (rolesMessage.length() != 0) {
embed.addField(new EmbedField(true, "Roles", rolesMessage));
}
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 = data.getList("loggers", Document.class);
if (loggers.isEmpty()) {
return;
}
if (guild.getSelfMember().hasPermission(Permission.VIEW_AUDIT_LOGS)) {
this.retrieveAuditLogsDelayed(guild, ActionType.KICK).whenComplete((logs, auditException) -> {
User moderator = logs == null ? null : logs.stream().filter(e -> e.getTargetIdLong() == user.getIdLong()).filter(e -> Duration.between(e.getTimeCreated(), ZonedDateTime.now(ZoneOffset.UTC)).toSeconds() <= 5).map(AuditLogEntry::getUser).findFirst().orElse(null);
LoggerEvent loggerEvent = moderator == null ? LoggerEvent.MEMBER_LEAVE : LoggerEvent.MEMBER_KICKED;
if (moderator != null) {
loggerContext.setModerator(moderator);
embed.setDescription(String.format("`%s` has been kicked by **%s**", user.getName(), moderator.getAsTag()));
}
this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
});
return;
}
LoggerEvent loggerEvent = LoggerEvent.MEMBER_LEAVE;
this.queue(guild, loggers, loggerEvent, loggerContext, embed.build());
});
}
use of net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent in project JDA by DV8FromTheWorld.
the class GuildMemberRemoveHandler method handleInternally.
@Override
protected Long handleInternally(DataObject content) {
final long id = content.getLong("guild_id");
boolean setup = getJDA().getGuildSetupController().onRemoveMember(id, content);
if (setup)
return null;
GuildImpl guild = (GuildImpl) getJDA().getGuildsView().get(id);
if (guild == null) {
// We probably just left the guild and this event is trying to remove us from the guild, therefore ignore
return null;
}
final long userId = content.getObject("user").getUnsignedLong("id");
if (userId == getJDA().getSelfUser().getIdLong()) {
// We probably just left the guild and this event is trying to remove us from the guild, therefore ignore
return null;
}
// Update the memberCount
guild.onMemberRemove();
CacheView.SimpleCacheView<MemberPresenceImpl> presences = guild.getPresenceView();
if (presences != null)
presences.remove(userId);
User user = api.getEntityBuilder().createUser(content.getObject("user"));
MemberImpl member = (MemberImpl) guild.getMembersView().remove(userId);
if (member == null) {
// WebSocketClient.LOG.debug("Received GUILD_MEMBER_REMOVE for a Member that does not exist in the specified Guild. UserId: {} GuildId: {}", userId, id);
// Remove user from voice channel if applicable
guild.getVoiceChannelsView().forEachUnordered((channel) -> {
VoiceChannelImpl impl = (VoiceChannelImpl) channel;
Member connected = impl.getConnectedMembersMap().remove(userId);
if (// user left channel!
connected != null) {
getJDA().handleEvent(new GuildVoiceLeaveEvent(getJDA(), responseNumber, connected, channel));
}
});
// Fire cache independent event, we can still inform the library user about the member removal
getJDA().handleEvent(new GuildMemberRemoveEvent(getJDA(), responseNumber, guild, user, null));
return null;
}
GuildVoiceStateImpl voiceState = (GuildVoiceStateImpl) member.getVoiceState();
if (// If this user was in an AudioChannel, fire VoiceLeaveEvent.
voiceState != null && voiceState.inAudioChannel()) {
AudioChannel channel = voiceState.getChannel();
voiceState.setConnectedChannel(null);
((AudioChannelMixin<?>) channel).getConnectedMembersMap().remove(userId);
getJDA().handleEvent(new GuildVoiceLeaveEvent(getJDA(), responseNumber, member, channel));
}
// The user is not in a different guild that we share
SnowflakeCacheViewImpl<User> userView = getJDA().getUsersView();
try (UnlockHook hook = userView.writeLock()) {
if (// don't remove selfUser from cache
userId != getJDA().getSelfUser().getIdLong() && getJDA().getGuildsView().stream().noneMatch(g -> g.getMemberById(userId) != null)) {
userView.remove(userId);
getJDA().getEventCache().clear(EventCache.Type.USER, userId);
}
}
// Cache independent event
getJDA().handleEvent(new GuildMemberRemoveEvent(getJDA(), responseNumber, guild, user, member));
return null;
}
Aggregations