From 886755cd408191619444ef107ccdc17f1a2ed7ef Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 27 Jun 2024 19:57:42 -0500 Subject: [PATCH] Add BannerCommand and add guild + user sub commands to AvatarCommand --- .../bat/command/impl/HelpCommand.java | 1 - .../command/impl/avatar/AvatarCommand.java | 21 +++++++ .../command/impl/avatar/GuildSubCommand.java | 39 +++++++++++++ .../UserSubCommand.java} | 23 ++++---- .../command/impl/banner/BannerCommand.java | 21 +++++++ .../command/impl/banner/GuildSubCommand.java | 39 +++++++++++++ .../command/impl/banner/UserSubCommand.java | 56 +++++++++++++++++++ .../command/impl/server/PremiumCommand.java | 2 - .../cc/fascinated/bat/model/BatGuild.java | 2 - .../fascinated/bat/service/UserService.java | 1 - 10 files changed, 189 insertions(+), 16 deletions(-) create mode 100644 src/main/java/cc/fascinated/bat/command/impl/avatar/AvatarCommand.java create mode 100644 src/main/java/cc/fascinated/bat/command/impl/avatar/GuildSubCommand.java rename src/main/java/cc/fascinated/bat/command/impl/{AvatarCommand.java => avatar/UserSubCommand.java} (66%) create mode 100644 src/main/java/cc/fascinated/bat/command/impl/banner/BannerCommand.java create mode 100644 src/main/java/cc/fascinated/bat/command/impl/banner/GuildSubCommand.java create mode 100644 src/main/java/cc/fascinated/bat/command/impl/banner/UserSubCommand.java diff --git a/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java b/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java index de68216..7103939 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java @@ -28,7 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; diff --git a/src/main/java/cc/fascinated/bat/command/impl/avatar/AvatarCommand.java b/src/main/java/cc/fascinated/bat/command/impl/avatar/AvatarCommand.java new file mode 100644 index 0000000..3af8dac --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/avatar/AvatarCommand.java @@ -0,0 +1,21 @@ +package cc.fascinated.bat.command.impl.avatar; + +import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "avatar", description = "View the avatar of the guild or a user") +public class AvatarCommand extends BatCommand { + @Autowired + public AvatarCommand(@NonNull ApplicationContext context) { + super.addSubCommand(context.getBean(GuildSubCommand.class)); + super.addSubCommand(context.getBean(UserSubCommand.class)); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/avatar/GuildSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/avatar/GuildSubCommand.java new file mode 100644 index 0000000..032b5e3 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/avatar/GuildSubCommand.java @@ -0,0 +1,39 @@ +package cc.fascinated.bat.command.impl.avatar; + +import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; +import cc.fascinated.bat.common.EmbedUtils; +import cc.fascinated.bat.model.BatGuild; +import cc.fascinated.bat.model.BatUser; +import lombok.NonNull; +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 net.dv8tion.jda.api.utils.ImageProxy; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component("avatar:guild.sub") +@CommandInfo(name = "guild", description = "View the avatar of the guild") +public class GuildSubCommand extends BatSubCommand { + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + ImageProxy icon = guild.getDiscordGuild().getIcon(); + + if (icon == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("%s does not have an avatar!".formatted(guild.getName())) + .build()) + .queue(); + return; + } + + interaction.replyEmbeds(EmbedUtils.genericEmbed() + .setAuthor("%s's Avatar".formatted(guild.getName()), null, guild.getDiscordGuild().getIconUrl()) + .setImage(icon.getUrl(4096)) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java b/src/main/java/cc/fascinated/bat/command/impl/avatar/UserSubCommand.java similarity index 66% rename from src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java rename to src/main/java/cc/fascinated/bat/command/impl/avatar/UserSubCommand.java index 49f568b..3a5cc99 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/avatar/UserSubCommand.java @@ -1,6 +1,6 @@ -package cc.fascinated.bat.command.impl; +package cc.fascinated.bat.command.impl.avatar; -import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.BatSubCommand; import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.model.BatGuild; @@ -15,20 +15,23 @@ import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; import org.springframework.stereotype.Component; /** - * @author Fascinated (fascinated7) + * @author Nick (okNick) */ -@Component -@CommandInfo(name = "avatar", description = "Get the avatar of a user", guildOnly = false) -public class AvatarCommand extends BatCommand { - public AvatarCommand() { - super.addOption(OptionType.USER, "user", "The user to get the avatar of", true); +@Component("avatar:user.sub") +@CommandInfo(name = "user", description = "View the avatar of a user", guildOnly = false) +public class UserSubCommand extends BatSubCommand { + public UserSubCommand() { + super.addOption(OptionType.USER, "user", "The user to view the avatar of", true); } @Override public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { OptionMapping userOption = interaction.getOption("user"); if (userOption == null) { - interaction.reply("You must provide a user to get the avatar of!").queue(); + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("You must provide a user to view the avatar of!") + .build()) + .queue(); return; } @@ -39,4 +42,4 @@ public class AvatarCommand extends BatCommand { .build() ).queue(); } -} +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/banner/BannerCommand.java b/src/main/java/cc/fascinated/bat/command/impl/banner/BannerCommand.java new file mode 100644 index 0000000..6603ea0 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/banner/BannerCommand.java @@ -0,0 +1,21 @@ +package cc.fascinated.bat.command.impl.banner; + +import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "banner", description = "View the banner of the guild or a user") +public class BannerCommand extends BatCommand { + @Autowired + public BannerCommand(@NonNull ApplicationContext context) { + super.addSubCommand(context.getBean(GuildSubCommand.class)); + super.addSubCommand(context.getBean(UserSubCommand.class)); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/banner/GuildSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/banner/GuildSubCommand.java new file mode 100644 index 0000000..617e487 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/banner/GuildSubCommand.java @@ -0,0 +1,39 @@ +package cc.fascinated.bat.command.impl.banner; + +import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; +import cc.fascinated.bat.common.EmbedUtils; +import cc.fascinated.bat.model.BatGuild; +import cc.fascinated.bat.model.BatUser; +import lombok.NonNull; +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 net.dv8tion.jda.api.utils.ImageProxy; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component("banner:guild.sub") +@CommandInfo(name = "guild", description = "View the banner of the guild") +public class GuildSubCommand extends BatSubCommand { + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + ImageProxy banner = guild.getDiscordGuild().getBanner(); + + if (banner == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("%s does not have a banner!".formatted(guild.getName())) + .build()) + .queue(); + return; + } + + interaction.replyEmbeds(EmbedUtils.genericEmbed() + .setAuthor("%s's Banner".formatted(guild.getName())) + .setImage(banner.getUrl(512)) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/banner/UserSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/banner/UserSubCommand.java new file mode 100644 index 0000000..08dfc65 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/banner/UserSubCommand.java @@ -0,0 +1,56 @@ +package cc.fascinated.bat.command.impl.banner; + +import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; +import cc.fascinated.bat.common.EmbedUtils; +import cc.fascinated.bat.model.BatGuild; +import cc.fascinated.bat.model.BatUser; +import lombok.NonNull; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.interactions.commands.OptionMapping; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; +import net.dv8tion.jda.api.utils.ImageProxy; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component("banner:user.sub") +@CommandInfo(name = "user", description = "View the banner of a user", guildOnly = false) +public class UserSubCommand extends BatSubCommand { + public UserSubCommand() { + super.addOption(OptionType.USER, "user", "The user to view the banner of", true); + } + + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + OptionMapping userOption = interaction.getOption("user"); + if (userOption == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("You must provide a user to view the banner of!") + .build()) + .queue(); + return; + } + + User target = userOption.getAsUser(); + ImageProxy banner = target.retrieveProfile().complete().getBanner(); + + if (banner == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("%s does not have a banner!".formatted(target.getName())) + .build()) + .queue(); + return; + } + + interaction.replyEmbeds(EmbedUtils.genericEmbed() + .setAuthor("%s's Banner".formatted(target.getName())) + .setImage(banner.getUrl(512)) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/PremiumCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/PremiumCommand.java index 3b6f13d..6939f19 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/server/PremiumCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/server/PremiumCommand.java @@ -3,14 +3,12 @@ package cc.fascinated.bat.command.impl.server; import cc.fascinated.bat.command.BatCommand; import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; -import cc.fascinated.bat.common.TimeUtils; 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.Permission; import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; import org.springframework.stereotype.Component; diff --git a/src/main/java/cc/fascinated/bat/model/BatGuild.java b/src/main/java/cc/fascinated/bat/model/BatGuild.java index fe8b769..aca4f48 100644 --- a/src/main/java/cc/fascinated/bat/model/BatGuild.java +++ b/src/main/java/cc/fascinated/bat/model/BatGuild.java @@ -2,12 +2,10 @@ package cc.fascinated.bat.model; import cc.fascinated.bat.common.ProfileHolder; import cc.fascinated.bat.service.DiscordService; -import jakarta.annotation.PostConstruct; import lombok.*; import net.dv8tion.jda.api.entities.Guild; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.stereotype.Component; import java.util.Calendar; import java.util.Date; diff --git a/src/main/java/cc/fascinated/bat/service/UserService.java b/src/main/java/cc/fascinated/bat/service/UserService.java index 1297c7d..92ace4a 100644 --- a/src/main/java/cc/fascinated/bat/service/UserService.java +++ b/src/main/java/cc/fascinated/bat/service/UserService.java @@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Service; -import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit;