From df44ae90b913b6698171e09c3cbd62c1fbc3e0de Mon Sep 17 00:00:00 2001 From: Liam Date: Sat, 29 Jun 2024 18:35:53 +0100 Subject: [PATCH] update member count command --- src/main/java/cc/fascinated/bat/Emojis.java | 12 ++++++ .../impl/server/MemberCountCommand.java | 41 ++++++++++++++++++- .../spotify/command/PauseSubCommand.java | 4 +- .../bat/service/DiscordService.java | 4 +- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/fascinated/bat/Emojis.java b/src/main/java/cc/fascinated/bat/Emojis.java index b358b2d..27b4bbb 100644 --- a/src/main/java/cc/fascinated/bat/Emojis.java +++ b/src/main/java/cc/fascinated/bat/Emojis.java @@ -15,6 +15,14 @@ public class Emojis { public static final Emoji CROSS_MARK_EMOJI; public static final Emoji SAD_FACE_EMOJI; + /** + * Presence Status Emojis + */ + public static final Emoji ONLINE_EMOJI; + public static final Emoji IDLE_EMOJI; + public static final Emoji DND_EMOJI; + public static final Emoji OFFLINE_EMOJI; + static { log.info("Loading emojis..."); JDA jda = DiscordService.JDA; @@ -22,6 +30,10 @@ public class Emojis { CHECK_MARK_EMOJI = jda.getEmojiById("1256633734065557676"); CROSS_MARK_EMOJI = jda.getEmojiById("1256634487429922897"); SAD_FACE_EMOJI = jda.getEmojiById("1256636078258131055"); + ONLINE_EMOJI = jda.getEmojiById("1256662465668710430"); + IDLE_EMOJI = jda.getEmojiById("1256662632203685991"); + DND_EMOJI = jda.getEmojiById("1256662572933845032"); + OFFLINE_EMOJI = jda.getEmojiById("1256662679402053662"); log.info("Loaded emojis!"); } } diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/MemberCountCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/MemberCountCommand.java index 2e459f0..96652bb 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/server/MemberCountCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/server/MemberCountCommand.java @@ -1,18 +1,24 @@ package cc.fascinated.bat.command.impl.server; +import cc.fascinated.bat.Emojis; import cc.fascinated.bat.command.BatCommand; import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; +import cc.fascinated.bat.common.NumberUtils; import cc.fascinated.bat.model.BatGuild; import cc.fascinated.bat.model.BatUser; import lombok.NonNull; import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.OnlineStatus; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.Map; + /** * @author Nick (okNick) */ @@ -23,7 +29,40 @@ public class MemberCountCommand extends BatCommand { public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { EmbedBuilder embed = EmbedUtils.genericEmbed().setAuthor("Member Count"); Guild discordGuild = guild.getDiscordGuild(); - embed.setDescription("**%s** has a total of %s members.".formatted(discordGuild.getName(), discordGuild.getMembers().size())); + int totalMembers = 0, totalUsers = 0, totalBots = 0; + Map memberCounts = new HashMap<>(); + for (Member guildMember : discordGuild.getMembers()) { + OnlineStatus status = guildMember.getOnlineStatus(); + memberCounts.put(status, memberCounts.getOrDefault(status, 0) + 1); + + if (guildMember.getUser().isBot()) { + totalBots++; + } else { + totalUsers++; + } + totalMembers++; + } + + embed.setDescription(""" + Total Members: `%s` + Total Users: `%s` + Total Bots: `%s` + \s + %s Online: `%s` + %s Idle: `%s` + %s Do Not Disturb: `%s` + %s Offline: `%s`""".formatted( + NumberUtils.formatNumberCommas(totalMembers), + NumberUtils.formatNumberCommas(totalUsers), + NumberUtils.formatNumberCommas(totalBots), + Emojis.ONLINE_EMOJI, + NumberUtils.formatNumberCommas(memberCounts.getOrDefault(OnlineStatus.ONLINE, 0)), + Emojis.IDLE_EMOJI, + NumberUtils.formatNumberCommas(memberCounts.getOrDefault(OnlineStatus.IDLE, 0)), + Emojis.DND_EMOJI, + NumberUtils.formatNumberCommas(memberCounts.getOrDefault(OnlineStatus.DO_NOT_DISTURB, 0)), + Emojis.OFFLINE_EMOJI, + NumberUtils.formatNumberCommas(memberCounts.getOrDefault(OnlineStatus.OFFLINE, 0)))); interaction.replyEmbeds(embed.build()).queue(); } } \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/features/spotify/command/PauseSubCommand.java b/src/main/java/cc/fascinated/bat/features/spotify/command/PauseSubCommand.java index 1c7ed41..b43e87c 100644 --- a/src/main/java/cc/fascinated/bat/features/spotify/command/PauseSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/spotify/command/PauseSubCommand.java @@ -47,8 +47,8 @@ public class PauseSubCommand extends BatSubCommand { boolean didPause = spotifyService.pausePlayback(user); interaction.replyEmbeds(EmbedUtils.successEmbed() - .setDescription(didPause ? ":pause_button: Paused the current track.".formatted(Emojis.CHECK_MARK_EMOJI) : - "%s The current track is already paused.".formatted(Emojis.CROSS_MARK_EMOJI)) + .setDescription(didPause ? ":pause_button: Paused the current track." + : "%s The current track is already paused.".formatted(Emojis.CROSS_MARK_EMOJI)) .build()) .queue(); } diff --git a/src/main/java/cc/fascinated/bat/service/DiscordService.java b/src/main/java/cc/fascinated/bat/service/DiscordService.java index 192b03b..d3ded74 100644 --- a/src/main/java/cc/fascinated/bat/service/DiscordService.java +++ b/src/main/java/cc/fascinated/bat/service/DiscordService.java @@ -41,13 +41,13 @@ public class DiscordService { GatewayIntent.GUILD_MESSAGES, GatewayIntent.MESSAGE_CONTENT, GatewayIntent.GUILD_MEMBERS, - GatewayIntent.GUILD_EMOJIS_AND_STICKERS + GatewayIntent.GUILD_EMOJIS_AND_STICKERS, + GatewayIntent.GUILD_PRESENCES )) .disableCache( CacheFlag.ACTIVITY, CacheFlag.VOICE_STATE, CacheFlag.CLIENT_STATUS, - CacheFlag.ONLINE_STATUS, CacheFlag.SCHEDULED_EVENTS ).build() .awaitReady();