forked from Fascinated/Bat
add premium to guilds and re-enable the global commands that are supposed to be global
This commit is contained in:
@ -9,11 +9,12 @@ import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||
*/
|
||||
@AllArgsConstructor @Getter
|
||||
public enum Category {
|
||||
GENERAL(Emoji.fromUnicode("U+2699"), "General"),
|
||||
FUN(Emoji.fromFormatted("U+1F973"), "Fun"),
|
||||
SERVER(Emoji.fromFormatted("U+1F5A5"), "Server"),
|
||||
UTILITY(Emoji.fromFormatted("U+1F6E0"), "Utility"),
|
||||
BEAT_SABER(Emoji.fromFormatted("U+1FA84"), "Beat Saber");
|
||||
GENERAL(Emoji.fromUnicode("U+2699"), "General", false),
|
||||
FUN(Emoji.fromFormatted("U+1F973"), "Fun", false),
|
||||
SERVER(Emoji.fromFormatted("U+1F5A5"), "Server", false),
|
||||
UTILITY(Emoji.fromFormatted("U+1F6E0"), "Utility", false),
|
||||
BEAT_SABER(Emoji.fromFormatted("U+1FA84"), "Beat Saber", false),
|
||||
BOT_ADMIN(null, null, true);
|
||||
|
||||
/**
|
||||
* The emoji for the category
|
||||
@ -25,6 +26,11 @@ public enum Category {
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* If the category is hidden
|
||||
*/
|
||||
private final boolean hidden;
|
||||
|
||||
public static Category getByName(String name) {
|
||||
for (Category category : Category.values()) {
|
||||
if (category.getName().equalsIgnoreCase(name)) {
|
||||
|
@ -47,4 +47,11 @@ public @interface CommandInfo {
|
||||
* @return the category of the command
|
||||
*/
|
||||
Category category() default Category.GENERAL;
|
||||
|
||||
/**
|
||||
* If the command is bot owner only
|
||||
*
|
||||
* @return if the command is bot owner only
|
||||
*/
|
||||
boolean botOwnerOnly() default false;
|
||||
}
|
@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "avatar", description = "Get the avatar of a user")
|
||||
@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);
|
||||
|
@ -24,7 +24,7 @@ import java.lang.management.RuntimeMXBean;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "botstats", description = "Shows the bot statistics")
|
||||
@CommandInfo(name = "botstats", description = "Shows the bot statistics", guildOnly = false)
|
||||
public class BotStatsCommand extends BatCommand {
|
||||
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
|
||||
private final GuildService guildService;
|
||||
|
@ -36,7 +36,7 @@ import java.util.Map;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "help", description = "View the bots command categories.")
|
||||
@CommandInfo(name = "help", description = "View the bots command categories.", guildOnly = false)
|
||||
public class HelpCommand extends BatCommand implements EventListener {
|
||||
private final CommandService commandService;
|
||||
|
||||
@ -65,7 +65,7 @@ public class HelpCommand extends BatCommand implements EventListener {
|
||||
}
|
||||
|
||||
String commands = "";
|
||||
List<BatCommand> categoryCommands = commandService.getCommandsByCategory(category);
|
||||
List<BatCommand> categoryCommands = commandService.getCommandsByCategory(category, true);
|
||||
if (categoryCommands.isEmpty()) {
|
||||
commands = "No commands available in this category.";
|
||||
} else {
|
||||
@ -111,7 +111,7 @@ public class HelpCommand extends BatCommand implements EventListener {
|
||||
private MessageEmbed createHomeEmbed() {
|
||||
String categories = "";
|
||||
for (Category category : Category.values()) {
|
||||
long commandCount = commandService.getCommandsByCategory(category).size();
|
||||
long commandCount = commandService.getCommandsByCategory(category, true).size();
|
||||
categories += "➜ %s - **%s Command%s**\n".formatted(
|
||||
category.getName(),
|
||||
commandCount,
|
||||
|
@ -16,7 +16,7 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "invite", description = "Invite the bot to your server!")
|
||||
@CommandInfo(name = "invite", description = "Invite the bot to your server!", guildOnly = false)
|
||||
public class InviteCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
|
@ -15,7 +15,7 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "ping", description = "Gets the ping of the bot")
|
||||
@CommandInfo(name = "ping", description = "Gets the ping of the bot", guildOnly = false)
|
||||
public class PingCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
|
@ -0,0 +1,21 @@
|
||||
package cc.fascinated.bat.command.impl.botadmin.premium;
|
||||
|
||||
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 Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "premiumadmin", description = "Set a guild as premium", botOwnerOnly = true)
|
||||
public class PremiumAdminCommand extends BatCommand {
|
||||
@Autowired
|
||||
public PremiumAdminCommand(@NonNull ApplicationContext context) {
|
||||
super.addSubCommand(context.getBean(SetSubCommand.class));
|
||||
super.addSubCommand(context.getBean(RemoveSubCommand.class));
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package cc.fascinated.bat.command.impl.botadmin.premium;
|
||||
|
||||
import cc.fascinated.bat.command.BatSubCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.service.GuildService;
|
||||
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.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "remove", description = "Remove premium from a guild")
|
||||
public class RemoveSubCommand extends BatSubCommand {
|
||||
private final GuildService guildService;
|
||||
|
||||
@Autowired
|
||||
public RemoveSubCommand(GuildService guildService) {
|
||||
this.guildService = guildService;
|
||||
super.addOption(OptionType.STRING, "guild", "The guild id to set as premium", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
OptionMapping guildOption = interaction.getOption("guild");
|
||||
if (guildOption == null) {
|
||||
interaction.reply("Please provide a guild id").queue();
|
||||
return;
|
||||
}
|
||||
String guildId = guildOption.getAsString();
|
||||
BatGuild batGuild = guildService.getGuild(guildId);
|
||||
if (batGuild == null) {
|
||||
interaction.reply("The guild with the id %s does not exist".formatted(guildId)).queue();
|
||||
return;
|
||||
}
|
||||
BatGuild.Premium premium = batGuild.getPremium();
|
||||
if (!premium.hasPremium()) {
|
||||
interaction.reply("The guild does not have premium").queue();
|
||||
return;
|
||||
}
|
||||
|
||||
premium.removePremium();
|
||||
guildService.saveGuild(batGuild);
|
||||
interaction.reply("The guild **%s** has had its premium removed".formatted(guild.getName())).queue();
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package cc.fascinated.bat.command.impl.botadmin.premium;
|
||||
|
||||
import cc.fascinated.bat.command.BatSubCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.service.GuildService;
|
||||
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.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "set", description = "Adds premium to a guild")
|
||||
public class SetSubCommand extends BatSubCommand {
|
||||
private final GuildService guildService;
|
||||
|
||||
@Autowired
|
||||
public SetSubCommand(GuildService guildService) {
|
||||
this.guildService = guildService;
|
||||
super.addOption(OptionType.STRING, "guild", "The guild id to set as premium", true);
|
||||
super.addOption(OptionType.BOOLEAN, "infinite", "Whether the premium length should be infinite", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
OptionMapping guildOption = interaction.getOption("guild");
|
||||
if (guildOption == null) {
|
||||
interaction.reply("Please provide a guild id").queue();
|
||||
return;
|
||||
}
|
||||
String guildId = guildOption.getAsString();
|
||||
OptionMapping infiniteOption = interaction.getOption("infinite");
|
||||
if (infiniteOption == null) {
|
||||
interaction.reply("Please provide whether the premium length should be infinite").queue();
|
||||
return;
|
||||
}
|
||||
|
||||
boolean infinite = infiniteOption.getAsBoolean();
|
||||
BatGuild batGuild = guildService.getGuild(guildId);
|
||||
if (batGuild == null) {
|
||||
interaction.reply("The guild with the id %s does not exist".formatted(guildId)).queue();
|
||||
return;
|
||||
}
|
||||
BatGuild.Premium premium = batGuild.getPremium();
|
||||
if (!infinite) {
|
||||
premium.addTime();
|
||||
} else {
|
||||
premium.addInfiniteTime();
|
||||
}
|
||||
guildService.saveGuild(batGuild);
|
||||
if (!infinite) {
|
||||
interaction.reply("The guild **%s** has been set as premium until <t:%s>".formatted(guild.getName(), premium.getExpiresAt().toInstant().toEpochMilli()/1000)).queue();
|
||||
} else {
|
||||
interaction.reply("The guild **%s** has been set as premium indefinitely".formatted(guild.getName())).queue();
|
||||
}
|
||||
}
|
||||
}
|
@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "cat", description = "Get a random cat image", category = Category.FUN)
|
||||
@CommandInfo(name = "cat", description = "Get a random cat image", category = Category.FUN, guildOnly = false)
|
||||
public class CatCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
|
@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "dog", description = "Get a random dog image", category = Category.FUN)
|
||||
@CommandInfo(name = "dog", description = "Get a random dog image", category = Category.FUN, guildOnly = false)
|
||||
public class DogCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
|
@ -0,0 +1,38 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "premium", description = "View the premium information for the guild", requiredPermissions = Permission.ADMINISTRATOR)
|
||||
public class PremiumCommand extends BatCommand {
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
BatGuild.Premium premium = guild.getPremium();
|
||||
EmbedBuilder embed = EmbedUtils.genericEmbed().setAuthor("Premium Information");
|
||||
if (premium.hasPremium()) {
|
||||
embed.addField("Premium", premium.hasPremium() ? "Yes" : "No", true);
|
||||
embed.addField("Started On", "<t:%d>".formatted(premium.getActivatedAt().toInstant().toEpochMilli()/1000), true);
|
||||
embed.addField("Expires At", premium.isInfinite() ? "Never" : "<t:%d>"
|
||||
.formatted(premium.getExpiresAt().toInstant().toEpochMilli()/1000), true);
|
||||
} else {
|
||||
embed.setDescription("The guild does not have premium");
|
||||
}
|
||||
interaction.replyEmbeds(embed.build()).queue();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user