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/fun/FoxCommand.java b/src/main/java/cc/fascinated/bat/command/impl/fun/FoxCommand.java new file mode 100644 index 0000000..4da33d9 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/fun/FoxCommand.java @@ -0,0 +1,36 @@ +package cc.fascinated.bat.command.impl.fun; + +import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.Category; +import cc.fascinated.bat.command.CommandInfo; +import cc.fascinated.bat.common.EmbedUtils; +import cc.fascinated.bat.common.WebRequest; +import cc.fascinated.bat.model.BatGuild; +import cc.fascinated.bat.model.BatUser; +import cc.fascinated.bat.model.token.randomfox.RandomFoxToken; +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 org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "fox", description = "Get a random fox image", category = Category.FUN, guildOnly = false) +public class FoxCommand extends BatCommand { + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + RandomFoxToken responseEntity = WebRequest.getAsEntity("https://randomfox.ca/floof/", RandomFoxToken.class); + if (responseEntity == null) { + interaction.reply("Failed to get a fox image!").queue(); + return; + } + + interaction.replyEmbeds(EmbedUtils.genericEmbed() + .setAuthor("Here's a random fox image!") + .setImage(responseEntity.getImage()) + .build()).queue(); + } +} 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 new file mode 100644 index 0000000..43f9d4e --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/server/MemberCountCommand.java @@ -0,0 +1,29 @@ +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.model.BatGuild; +import cc.fascinated.bat.model.BatUser; +import lombok.NonNull; +import net.dv8tion.jda.api.EmbedBuilder; +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; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "membercount", description = "View the member count of the server!") +public class MemberCountCommand extends BatCommand { + @Override + 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(discordGuild.getName() + " has a total of " + discordGuild.getMembers().size() + " members."); + interaction.replyEmbeds(embed.build()).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/channel/ChannelCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/channel/ChannelCommand.java new file mode 100644 index 0000000..dae9dd6 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/server/channel/ChannelCommand.java @@ -0,0 +1,23 @@ +package cc.fascinated.bat.command.impl.server.channel; + +import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.Category; +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 = "channel", description = "View or set information about a channel", category = Category.SERVER) +public class ChannelCommand extends BatCommand { + @Autowired + public ChannelCommand(@NonNull ApplicationContext context) { + super.addSubCommand(context.getBean(ViewTopicSubCommand.class)); + super.addSubCommand(context.getBean(SetTopicSubCommand.class)); + super.addSubCommand(context.getBean(RemoveTopicSubCommand.class)); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/channel/RemoveTopicSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/channel/RemoveTopicSubCommand.java new file mode 100644 index 0000000..9735985 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/server/channel/RemoveTopicSubCommand.java @@ -0,0 +1,53 @@ +package cc.fascinated.bat.command.impl.server.channel; + +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.Permission; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.channel.Channel; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "removetopic", description = "Remove the topic of a channel", requiredPermissions = Permission.MANAGE_CHANNEL) +public class RemoveTopicSubCommand extends BatSubCommand { + public RemoveTopicSubCommand() { + super.addOption(OptionType.CHANNEL, "channel", "The channel to remove the topic of", false); + } + + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + Channel target = interaction.getOption("channel") == null ? channel : interaction.getOption("channel").getAsChannel(); + if (!(target instanceof TextChannel textChannel)) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("<#%s> is not a text channel!".formatted(target.getId())) + .build()) + .queue(); + return; + } + + if (textChannel.getTopic() == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("<#%s> does not have a topic!".formatted(textChannel.getId())) + .build()) + .queue(); + return; + } + + textChannel.getManager().setTopic(null).queue(); + interaction.replyEmbeds(EmbedUtils.successEmbed() + .setDescription("Successfully removed the topic of <#%s>".formatted(textChannel.getId())) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/channel/SetTopicSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/channel/SetTopicSubCommand.java new file mode 100644 index 0000000..23c3467 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/server/channel/SetTopicSubCommand.java @@ -0,0 +1,55 @@ +package cc.fascinated.bat.command.impl.server.channel; + +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.Permission; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.channel.Channel; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "settopic", description = "Set the topic of a channel", requiredPermissions = Permission.MANAGE_CHANNEL) +public class SetTopicSubCommand extends BatSubCommand { + public SetTopicSubCommand() { + super.addOption(OptionType.STRING, "topic", "The topic to set", true); + super.addOption(OptionType.CHANNEL, "channel", "The channel to set the topic of", false); + } + + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + Channel target = interaction.getOption("channel") == null ? channel : interaction.getOption("channel").getAsChannel(); + if (!(target instanceof TextChannel textChannel)) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("<#%s> is not a text channel!".formatted(target.getId())) + .build()) + .queue(); + return; + } + + String topic = interaction.getOption("topic").getAsString(); + if (topic.length() > 1024) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("The topic must be 1024 characters or less!") + .build()) + .queue(); + return; + } + + textChannel.getManager().setTopic(topic).queue(); + interaction.replyEmbeds(EmbedUtils.successEmbed() + .setDescription("Successfully set the topic of <#%s> to: \"%s\"".formatted(textChannel.getId(), topic)) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/server/channel/ViewTopicSubCommand.java b/src/main/java/cc/fascinated/bat/command/impl/server/channel/ViewTopicSubCommand.java new file mode 100644 index 0000000..c8d6ccd --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/impl/server/channel/ViewTopicSubCommand.java @@ -0,0 +1,52 @@ +package cc.fascinated.bat.command.impl.server.channel; + +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.Channel; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction; +import org.springframework.stereotype.Component; + +/** + * @author Nick (okNick) + */ +@Component +@CommandInfo(name = "viewtopic", description = "View the topic of a channel") +public class ViewTopicSubCommand extends BatSubCommand { + public ViewTopicSubCommand() { + super.addOption(OptionType.CHANNEL, "channel", "The channel to view the topic of", false); + } + + @Override + public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { + Channel target = interaction.getOption("channel") == null ? channel : interaction.getOption("channel").getAsChannel(); + if (!(target instanceof TextChannel textChannel)) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("<#%s> is not a text channel!".formatted(target.getId())) + .build()) + .queue(); + return; + } + + String topic = textChannel.getTopic(); + if (topic == null) { + interaction.replyEmbeds(EmbedUtils.errorEmbed() + .setDescription("<#%s> does not have a topic!".formatted(textChannel.getId())) + .build()) + .queue(); + return; + } + + interaction.replyEmbeds(EmbedUtils.genericEmbed() + .setDescription("The topic of <#%s> is: \"%s\"".formatted(textChannel.getId(), topic)) + .build() + ).queue(); + } +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/model/token/randomfox/RandomFoxToken.java b/src/main/java/cc/fascinated/bat/model/token/randomfox/RandomFoxToken.java new file mode 100644 index 0000000..c59b169 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/model/token/randomfox/RandomFoxToken.java @@ -0,0 +1,21 @@ +package cc.fascinated.bat.model.token.randomfox; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author Nick (okNick) + */ +@Getter +@AllArgsConstructor +public class RandomFoxToken { + /** + * The URL of the raw image. + */ + private String image; + + /** + * The link of the image + other web info. + */ + private String link; +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/service/CommandService.java b/src/main/java/cc/fascinated/bat/service/CommandService.java index 6894ab1..c54ba1d 100644 --- a/src/main/java/cc/fascinated/bat/service/CommandService.java +++ b/src/main/java/cc/fascinated/bat/service/CommandService.java @@ -208,4 +208,4 @@ public class CommandService extends ListenerAdapter { .queue(); } } -} +} \ No newline at end of file