From e0d66b816d9deca8acb80f02f91d8d0860e66216 Mon Sep 17 00:00:00 2001 From: Savvy Date: Sun, 25 Feb 2018 00:45:05 -0500 Subject: [PATCH] Implemented COmmandType and ReactionManager --- src/main/java/io/rixa/bot/Rixa.java | 297 ++++++++++-------- .../java/io/rixa/bot/commands/Command.java | 67 ++-- .../commands/cmds/admin/ConfigCommand.java | 5 +- .../bot/commands/cmds/admin/PMCommand.java | 7 +- .../commands/cmds/general/AdviceCommand.java | 5 +- .../cmds/general/FeaturesCommand.java | 5 +- .../commands/cmds/general/HelpCommand.java | 5 +- .../commands/cmds/general/InfoCommand.java | 5 +- .../cmds/general/LeaderboardsCommand.java | 5 +- .../cmds/general/MinecraftCommand.java | 5 +- .../commands/cmds/general/ModulesCommand.java | 5 +- .../commands/cmds/general/MusicCommand.java | 5 +- .../commands/cmds/general/PingCommand.java | 5 +- .../commands/cmds/general/QuoteCommand.java | 5 +- .../commands/cmds/general/RankCommand.java | 15 +- .../commands/cmds/general/RoleMemberList.java | 5 +- .../cmds/general/ServerInfoCommand.java | 5 +- .../cmds/general/UrbanDictionaryCommand.java | 5 +- .../commands/cmds/general/YoutubeCommand.java | 5 +- .../commands/cmds/moderator/BanCommand.java | 11 +- .../commands/cmds/moderator/ClearCommand.java | 5 +- .../commands/cmds/moderator/MuteCommand.java | 37 ++- .../commands/cmds/other/ShutdownCommand.java | 5 +- .../exceptions/ReactNotFoundException.java | 8 + .../bot/commands/handler/CommandHandler.java | 4 + .../bot/commands/handler/CommandType.java | 8 + .../io/rixa/bot/events/MessageListener.java | 12 +- .../java/io/rixa/bot/reactions/React.java | 10 + .../io/rixa/bot/reactions/ReactManager.java | 37 +++ .../bot/reactions/react/HelpReaction.java | 118 +++++++ .../java/io/rixa/bot/utils/DiscordUtils.java | 17 + 31 files changed, 509 insertions(+), 224 deletions(-) create mode 100644 src/main/java/io/rixa/bot/commands/exceptions/ReactNotFoundException.java create mode 100644 src/main/java/io/rixa/bot/commands/handler/CommandType.java create mode 100644 src/main/java/io/rixa/bot/reactions/React.java create mode 100644 src/main/java/io/rixa/bot/reactions/ReactManager.java create mode 100644 src/main/java/io/rixa/bot/reactions/react/HelpReaction.java diff --git a/src/main/java/io/rixa/bot/Rixa.java b/src/main/java/io/rixa/bot/Rixa.java index 314ebc7..cac0dee 100644 --- a/src/main/java/io/rixa/bot/Rixa.java +++ b/src/main/java/io/rixa/bot/Rixa.java @@ -4,12 +4,27 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.rixa.bot.commands.cmds.admin.ConfigCommand; import io.rixa.bot.commands.cmds.admin.PMCommand; -import io.rixa.bot.commands.cmds.general.*; +import io.rixa.bot.commands.cmds.general.AdviceCommand; +import io.rixa.bot.commands.cmds.general.FeaturesCommand; +import io.rixa.bot.commands.cmds.general.HelpCommand; +import io.rixa.bot.commands.cmds.general.InfoCommand; +import io.rixa.bot.commands.cmds.general.LeaderboardsCommand; +import io.rixa.bot.commands.cmds.general.MinecraftCommand; +import io.rixa.bot.commands.cmds.general.ModulesCommand; +import io.rixa.bot.commands.cmds.general.MusicCommand; +import io.rixa.bot.commands.cmds.general.PingCommand; +import io.rixa.bot.commands.cmds.general.QuoteCommand; +import io.rixa.bot.commands.cmds.general.RankCommand; +import io.rixa.bot.commands.cmds.general.RoleMemberList; +import io.rixa.bot.commands.cmds.general.ServerInfoCommand; +import io.rixa.bot.commands.cmds.general.UrbanDictionaryCommand; +import io.rixa.bot.commands.cmds.general.YoutubeCommand; import io.rixa.bot.commands.cmds.moderator.BanCommand; import io.rixa.bot.commands.cmds.moderator.ClearCommand; import io.rixa.bot.commands.cmds.moderator.MuteCommand; import io.rixa.bot.commands.cmds.other.ShutdownCommand; import io.rixa.bot.commands.handler.CommandHandler; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.data.config.Configuration; import io.rixa.bot.data.storage.DatabaseAdapter; @@ -23,6 +38,14 @@ import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.user.RixaUser; import io.rixa.bot.user.manager.UserManager; import io.rixa.bot.utils.FileUtils; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.logging.Logger; +import javax.security.auth.login.LoginException; import lombok.Getter; import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.JDA; @@ -31,148 +54,162 @@ import net.dv8tion.jda.core.OnlineStatus; import net.dv8tion.jda.core.entities.Game; import net.dv8tion.jda.core.entities.Game.GameType; import net.dv8tion.jda.core.entities.Guild; -import net.dv8tion.jda.core.exceptions.RateLimitedException; import net.dv8tion.jda.core.hooks.AnnotatedEventManager; -import javax.security.auth.login.LoginException; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.logging.Logger; - public class Rixa { - private static Rixa instance; - @Getter - private CommandHandler commandHandler; - @Getter - private Configuration configuration; - @Getter - private ObjectMapper objectMapper; - @Getter - private List shardList; - @Getter - private File defaultPath; - @Getter - private Logger logger; - private static long timeUp; + private static Rixa instance; + private static long timeUp; + @Getter + private CommandHandler commandHandler; + @Getter + private Configuration configuration; + @Getter + private ObjectMapper objectMapper; + @Getter + private List shardList; + @Getter + private File defaultPath; + @Getter + private Logger logger; - private Rixa() { - instance = this; - logger = Logger.getLogger(Rixa.class.getCanonicalName()); - objectMapper = new ObjectMapper(new YAMLFactory()); - defaultPath = new File("Rixa/"); - commandHandler = new CommandHandler(); - shardList = new ArrayList<>(); - defaultPath.mkdirs(); - loadConfiguration(); - registerCommands(); - loadJDA(); - } + private Rixa() { + instance = this; + logger = Logger.getLogger(Rixa.class.getCanonicalName()); + objectMapper = new ObjectMapper(new YAMLFactory()); + defaultPath = new File("Rixa/"); + commandHandler = new CommandHandler(); + shardList = new ArrayList<>(); + defaultPath.mkdirs(); + loadConfiguration(); + registerCommands(); + loadJDA(); + } - public long getTimeUp() { - return timeUp; - } + public static Rixa getInstance() { + return (instance == null) ? new Rixa() : instance; + } - private void loadJDA() { - JDABuilder jda = new JDABuilder(AccountType.BOT) - .setToken(configuration.getToken()) - .setGame(Game.of(GameType.WATCHING, configuration.getBotGame())) - .setEventManager(new AnnotatedEventManager()) - .addEventListener(new ReadyListener(), new BotJoinListener(), new MessageListener(), - new UserListener()) - .setAutoReconnect(true) - .setAudioEnabled(true) - .setEnableShutdownHook(false) - .setStatus(OnlineStatus.ONLINE); - for (int i = 0; i < configuration.getShards(); i++) { - try { - getLogger().info("Loading Shard #" + (i + 1) + "!"); - getShardList().add(jda.useSharding(i, configuration.getShards()).buildBlocking()); - getLogger().info("Shard #" + (i + 1) + " has been loaded"); - Thread.sleep(5000); - } catch (InterruptedException | LoginException e) { - e.printStackTrace(); - } - } - Runtime.getRuntime().addShutdownHook(new Thread(() -> - getShardList().forEach(jdaInstance -> { - UserManager.getInstance().getUserMap().values().forEach(RixaUser::save); - jdaInstance.getGuilds().forEach((Guild guild) -> { - System.out.println("Saving " + guild.getName() + ": " + guild.getId()); - RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild); - rixaGuild.save(); - }); - jdaInstance.shutdown(); - }))); - timeUp = System.currentTimeMillis(); - } + public long getTimeUp() { + return timeUp; + } - private void registerCommands() { - this.commandHandler.registerCommands( - new AdviceCommand("advice", RixaPermission.NONE, "Receive advice from the great beyond..."), - new BanCommand("ban", RixaPermission.BAN_MEMBER, "Ban a player from your server."), - new ClearCommand("clear", RixaPermission.CLEAR_CHAT, "Clear Chat!", Arrays.asList("deleemessages", "cmessages")), - new ConfigCommand("config", RixaPermission.ACCESS_CONFIG, "Access the config menu"), - new FeaturesCommand("features", RixaPermission.NONE, "List Rixa's official features!"), - new HelpCommand("help", RixaPermission.NONE, "Review commands and its usages!"), - new InfoCommand("info", RixaPermission.NONE, "Review information about a user or Rixa!"), - new MinecraftCommand("minecraft", RixaPermission.NONE, "See minecraft server info", Collections.singletonList("mc")), - new ModulesCommand("modules", RixaPermission.NONE, "List both enabled & disabled features of Rixa for this server!"), - new MusicCommand("music", RixaPermission.NONE, "Listen to music right from discord!"), - new MuteCommand("mute", RixaPermission.MUTE, "Mute those pesky children!"), - new PingCommand("ping", RixaPermission.NONE, "Check Rixa's ping!"), - new PMCommand("pm", RixaPermission.PM_MESSAGE, "Private Message all users with a specific role!"), - new QuoteCommand("quote", RixaPermission.NONE, "Receive a quote from some of the greatest authors!"), - new RoleMemberList("listmembers", RixaPermission.NONE, "List all users with a specific role!"), - new ServerInfoCommand("serverinfo", RixaPermission.NONE, "Review information about the server!"), - new ShutdownCommand("shutdown", RixaPermission.NONE, "Shutdown Rixa!"), - new UrbanDictionaryCommand("ud", RixaPermission.NONE, "Look up urban definitions!"), - new YoutubeCommand("youtube", RixaPermission.NONE, "Search for music on youtube!"), - new LeaderboardsCommand("leaderboards", RixaPermission.NONE, "Look at the levels leaderboards!"), - new RankCommand("rank", RixaPermission.NONE, "Check your rank!")); + private void loadJDA() { + JDABuilder jda = new JDABuilder(AccountType.BOT) + .setToken(configuration.getToken()) + .setGame(Game.of(GameType.WATCHING, configuration.getBotGame())) + .setEventManager(new AnnotatedEventManager()) + .addEventListener(new ReadyListener(), new BotJoinListener(), new MessageListener(), + new UserListener()) + .setAutoReconnect(true) + .setAudioEnabled(true) + .setEnableShutdownHook(false) + .setStatus(OnlineStatus.ONLINE); + for (int i = 0; i < configuration.getShards(); i++) { + try { + getLogger().info("Loading Shard #" + (i + 1) + "!"); + getShardList().add(jda.useSharding(i, configuration.getShards()).buildBlocking()); + getLogger().info("Shard #" + (i + 1) + " has been loaded"); + Thread.sleep(5000); + } catch (InterruptedException | LoginException e) { + e.printStackTrace(); + } } + Runtime.getRuntime().addShutdownHook(new Thread(() -> + getShardList().forEach(jdaInstance -> { + UserManager.getInstance().getUserMap().values().forEach(RixaUser::save); + jdaInstance.getGuilds().forEach((Guild guild) -> { + System.out.println("Saving " + guild.getName() + ": " + guild.getId()); + RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild); + rixaGuild.save(); + }); + jdaInstance.shutdown(); + }))); + timeUp = System.currentTimeMillis(); + } - private void loadConfiguration() { - try { - if (FileUtils.saveResource("config.yml", false)) { - logger.info("Shutting down Rixa. Please edit configuration"); - System.exit(0); - } - File file = new File(defaultPath.getPath() + "/config.yml"); - configuration = objectMapper.readValue(file, Configuration.class); - logger.info("Configuration successfully loaded."); - DatabaseAdapter.getInstance().check(); - Arrays.stream(DatabaseTables.values()).forEach(databaseTables -> { - System.out.println("Checking database table (creating if needed): " + databaseTables.toString()); - DatabaseAdapter.getInstance().get().update(databaseTables.getQuery()); - System.out.println("Done checking " + databaseTables.toString()); - }); - } catch (IOException e) { - logger.severe("Could not properly load configuration file!."); - e.printStackTrace(); - } - } + private void registerCommands() { + this.commandHandler.registerCommands( + new AdviceCommand("advice", RixaPermission.NONE, "Receive advice from the great beyond...", + CommandType.USER), + new FeaturesCommand("features", RixaPermission.NONE, "List Rixa's official features!", + CommandType.USER), + new HelpCommand("help", RixaPermission.NONE, "Review commands and its usages!", + CommandType.USER), + new InfoCommand("info", RixaPermission.NONE, "Review information about a user or Rixa!", + CommandType.USER), + new MinecraftCommand("minecraft", RixaPermission.NONE, "See minecraft server info", + CommandType.USER, Collections.singletonList("mc")), + new ModulesCommand("modules", RixaPermission.NONE, + "List both enabled & disabled features of Rixa for this server!", CommandType.USER), + new MusicCommand("music", RixaPermission.NONE, "Listen to music right from discord!", + CommandType.USER), + new PingCommand("ping", RixaPermission.NONE, "Check Rixa's ping!", CommandType.USER), + new ServerInfoCommand("serverinfo", RixaPermission.NONE, + "Review information about the server!", CommandType.USER), + new QuoteCommand("quote", RixaPermission.NONE, + "Receive a quote from some of the greatest authors!", CommandType.USER), + new RankCommand("rank", RixaPermission.NONE, "Check your rank!", CommandType.USER), + new LeaderboardsCommand("leaderboards", RixaPermission.NONE, + "Look at the levels leaderboards!", CommandType.USER), + new YoutubeCommand("youtube", RixaPermission.NONE, "Search for music on youtube!", + CommandType.USER), + new UrbanDictionaryCommand("ud", RixaPermission.NONE, "Look up urban definitions!", + CommandType.USER), - public Guild getGuildById(String id) { - Guild guild = null; - for (JDA jda : Rixa.getInstance().getShardList()) { - if (jda.getGuilds().size() == 0 || jda.getGuildById(id) == null) continue; - guild = jda.getGuildById(id); - break; - } - if (guild != null) return guild; - throw new NullPointerException("Guild not found."); - } + new BanCommand("ban", RixaPermission.BAN_MEMBER, "Ban a player from your server.", + CommandType.STAFF), + new ClearCommand("clear", RixaPermission.CLEAR_CHAT, "Clear Chat!", CommandType.STAFF, + Arrays.asList("deleemessages", "cmessages")), + new ConfigCommand("config", RixaPermission.ACCESS_CONFIG, "Access the config menu", + CommandType.STAFF), + new MuteCommand("mute", RixaPermission.MUTE, "Mute those pesky children!", + CommandType.STAFF), + new PMCommand("pm", RixaPermission.PM_MESSAGE, + "Private Message all users with a specific role!", CommandType.STAFF), + new RoleMemberList("listmembers", RixaPermission.NONE, + "List all users with a specific role!", CommandType.STAFF), + new ShutdownCommand("shutdown", RixaPermission.NONE, "Shutdown Rixa!", CommandType.OWNER)); + } - public static Rixa getInstance() { - return (instance == null) ? new Rixa() : instance; + private void loadConfiguration() { + try { + if (FileUtils.saveResource("config.yml", false)) { + logger.info("Shutting down Rixa. Please edit configuration"); + System.exit(0); + } + File file = new File(defaultPath.getPath() + "/config.yml"); + configuration = objectMapper.readValue(file, Configuration.class); + logger.info("Configuration successfully loaded."); + DatabaseAdapter.getInstance().check(); + Arrays.stream(DatabaseTables.values()).forEach(databaseTables -> { + System.out + .println("Checking database table (creating if needed): " + databaseTables.toString()); + DatabaseAdapter.getInstance().get().update(databaseTables.getQuery()); + System.out.println("Done checking " + databaseTables.toString()); + }); + } catch (IOException e) { + logger.severe("Could not properly load configuration file!."); + e.printStackTrace(); } + } - public void close() { - shardList.forEach(JDA::shutdown); + public Guild getGuildById(String id) { + Guild guild = null; + for (JDA jda : Rixa.getInstance().getShardList()) { + if (jda.getGuilds().size() == 0 || jda.getGuildById(id) == null) { + continue; + } + guild = jda.getGuildById(id); + break; } + if (guild != null) { + return guild; + } + throw new NullPointerException("Guild not found."); + } + + public void close() { + shardList.forEach(JDA::shutdown); + } } \ No newline at end of file diff --git a/src/main/java/io/rixa/bot/commands/Command.java b/src/main/java/io/rixa/bot/commands/Command.java index 9b67a85..93700b0 100644 --- a/src/main/java/io/rixa/bot/commands/Command.java +++ b/src/main/java/io/rixa/bot/commands/Command.java @@ -1,42 +1,59 @@ package io.rixa.bot.commands; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import lombok.Getter; import lombok.Setter; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.TextChannel; -import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; public abstract class Command { - @Getter @Setter private String command, description; - @Getter @Setter private RixaPermission permission; - @Getter @Setter private List aliases; - public Command(String command) { - this(command, RixaPermission.NONE, "Undefined", Collections.emptyList()); - } + @Getter + @Setter + private String command, description; + @Getter + @Setter + private RixaPermission permission; + @Getter + @Setter + private List aliases; + @Getter + @Setter + private CommandType commandType; - public Command(String command, RixaPermission rixaPermission) { - this(command, rixaPermission, "Undefined", Collections.emptyList()); - } + public Command(String command) { + this(command, RixaPermission.NONE, "Undefined", CommandType.USER, Collections.emptyList()); + } - public Command(String command, RixaPermission rixaPermission, String description) { - this(command, rixaPermission, description, Collections.emptyList()); - } + public Command(String command, RixaPermission rixaPermission) { + this(command, rixaPermission, "Undefined", CommandType.USER, Collections.emptyList()); + } - public Command(String command, RixaPermission rixaPermission, String description, List aliases) { - setCommand(command); - setPermission(rixaPermission); - setDescription(description); - setAliases(aliases); - } + public Command(String command, RixaPermission rixaPermission, String description) { + this(command, rixaPermission, description, CommandType.USER, Collections.emptyList()); + } - // public abstract void execute(GuildMessageReceivedEvent event); + public Command(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + this(command, rixaPermission, description, commandType, Collections.emptyList()); + } - public abstract void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) throws IOException; + public Command(String command, RixaPermission rixaPermission, String description, + CommandType commandType, List aliases) { + setCommand(command); + setPermission(rixaPermission); + setDescription(description); + setAliases(aliases); + this.commandType = commandType; + } + + // public abstract void execute(GuildMessageReceivedEvent event); + + public abstract void execute(String commandLabel, Guild guild, Member member, TextChannel channel, + String[] args) throws IOException; } diff --git a/src/main/java/io/rixa/bot/commands/cmds/admin/ConfigCommand.java b/src/main/java/io/rixa/bot/commands/cmds/admin/ConfigCommand.java index c5bd7b0..ab4c20d 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/admin/ConfigCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/admin/ConfigCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.admin; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -22,8 +23,8 @@ public class ConfigCommand extends Command { private Pagination pagination; - public ConfigCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public ConfigCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); pagination = new Pagination(Arrays.asList( "%pconfig set greetings ; Set channel where greeting messages are announced!", diff --git a/src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java b/src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java index 0e3cee2..8fa82fb 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/admin/PMCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.admin; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.MessageFactory; @@ -14,10 +15,8 @@ import net.dv8tion.jda.core.requests.ErrorResponse; public class PMCommand extends Command { - @Getter private RixaPermission rixaPermission; - public PMCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); - this.rixaPermission = rixaPermission; + public PMCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/AdviceCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/AdviceCommand.java index 6a5bfe0..d1f8dd0 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/AdviceCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/AdviceCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.WebUtil; @@ -14,8 +15,8 @@ import java.io.IOException; public class AdviceCommand extends Command { - public AdviceCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public AdviceCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/FeaturesCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/FeaturesCommand.java index 1f10a75..60a7b67 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/FeaturesCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/FeaturesCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -16,8 +17,8 @@ public class FeaturesCommand extends Command { "Role Management", "Fun Commands", "Custom Commands", "Games", "& more." }; - public FeaturesCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public FeaturesCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/HelpCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/HelpCommand.java index c5edbae..7f8f0e8 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/HelpCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/HelpCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import net.dv8tion.jda.core.EmbedBuilder; @@ -14,8 +15,8 @@ import net.dv8tion.jda.core.exceptions.PermissionException; public class HelpCommand extends Command { - public HelpCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public HelpCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/InfoCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/InfoCommand.java index 0cd5ba0..a27cf7c 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/InfoCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/InfoCommand.java @@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.Rixa; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.MessageFactory; @@ -20,8 +21,8 @@ import java.util.concurrent.TimeUnit; public class InfoCommand extends Command { - public InfoCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public InfoCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/LeaderboardsCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/LeaderboardsCommand.java index a20ac43..74b24ad 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/LeaderboardsCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/LeaderboardsCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -20,8 +21,8 @@ import java.util.List; public class LeaderboardsCommand extends Command { - public LeaderboardsCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public LeaderboardsCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/MinecraftCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/MinecraftCommand.java index 8a5212d..ceebdbe 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/MinecraftCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/MinecraftCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.WebUtil; @@ -16,8 +17,8 @@ import java.util.List; public class MinecraftCommand extends Command { - public MinecraftCommand(String command, RixaPermission rixaPermission, String description, Listaliases) { - super(command, rixaPermission, description, aliases); + public MinecraftCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType, Listaliases) { + super(command, rixaPermission, description, commandType, aliases); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/ModulesCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/ModulesCommand.java index 59b0910..0528028 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/ModulesCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/ModulesCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -15,8 +16,8 @@ import java.util.List; public class ModulesCommand extends Command { - public ModulesCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public ModulesCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/MusicCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/MusicCommand.java index c5d7f65..8dd8f07 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/MusicCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/MusicCommand.java @@ -17,6 +17,7 @@ import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import io.rixa.bot.apis.YoutubeSearch; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -43,8 +44,8 @@ public class MusicCommand extends Command { private final int DEFAULT_VOLUME = 35; private final AudioPlayerManager playerManager; - public MusicCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public MusicCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); this.playerManager = new DefaultAudioPlayerManager(); this.playerManager.registerSourceManager(new YoutubeAudioSourceManager()); this.playerManager.registerSourceManager(new SoundCloudAudioSourceManager()); diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/PingCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/PingCommand.java index ed896b9..3e96b0e 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/PingCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/PingCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import net.dv8tion.jda.core.entities.Guild; @@ -10,8 +11,8 @@ import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; public class PingCommand extends Command { - public PingCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public PingCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/QuoteCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/QuoteCommand.java index 6ec39e5..eefee94 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/QuoteCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/QuoteCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.WebUtil; @@ -14,8 +15,8 @@ import java.io.IOException; public class QuoteCommand extends Command { - public QuoteCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public QuoteCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/RankCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/RankCommand.java index 7cade8b..a9a9f1f 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/RankCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/RankCommand.java @@ -1,32 +1,25 @@ package io.rixa.bot.commands.cmds.general; -import io.rixa.bot.Rixa; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.data.storage.DatabaseAdapter; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; -import io.rixa.bot.guild.modules.module.LevelsModule; -import io.rixa.bot.pagination.ObjectPagination; import io.rixa.bot.user.RixaUser; import io.rixa.bot.user.manager.UserManager; import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.MessageFactory; -import net.dv8tion.jda.core.MessageBuilder; +import java.util.List; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.User; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Collections; -import java.util.List; - public class RankCommand extends Command { - public RankCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public RankCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/RoleMemberList.java b/src/main/java/io/rixa/bot/commands/cmds/general/RoleMemberList.java index c0bdf34..a1154f6 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/RoleMemberList.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/RoleMemberList.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.MessageFactory; @@ -14,8 +15,8 @@ import java.util.List; public class RoleMemberList extends Command { - public RoleMemberList(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public RoleMemberList(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/ServerInfoCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/ServerInfoCommand.java index 9a1eeb2..66bdb3a 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/ServerInfoCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/ServerInfoCommand.java @@ -1,6 +1,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -15,8 +16,8 @@ import java.time.format.DateTimeFormatter; public class ServerInfoCommand extends Command { - public ServerInfoCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public ServerInfoCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/UrbanDictionaryCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/UrbanDictionaryCommand.java index c3d3c22..9941552 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/UrbanDictionaryCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/UrbanDictionaryCommand.java @@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.apis.UrbanDictionary; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import net.dv8tion.jda.core.MessageBuilder; @@ -15,8 +16,8 @@ import java.net.URLEncoder; public class UrbanDictionaryCommand extends Command { - public UrbanDictionaryCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public UrbanDictionaryCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/general/YoutubeCommand.java b/src/main/java/io/rixa/bot/commands/cmds/general/YoutubeCommand.java index 636f600..868f78f 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/general/YoutubeCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/general/YoutubeCommand.java @@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general; import io.rixa.bot.apis.YoutubeSearch; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.utils.MessageFactory; import net.dv8tion.jda.core.entities.Guild; @@ -12,8 +13,8 @@ import java.io.IOException; public class YoutubeCommand extends Command { - public YoutubeCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public YoutubeCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/cmds/moderator/BanCommand.java b/src/main/java/io/rixa/bot/commands/cmds/moderator/BanCommand.java index 4a7a0f5..f218d1c 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/moderator/BanCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/moderator/BanCommand.java @@ -1,24 +1,21 @@ package io.rixa.bot.commands.cmds.moderator; -import io.rixa.bot.Rixa; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.utils.MessageFactory; -import jdk.nashorn.internal.objects.annotations.Getter; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.TextChannel; -import java.util.List; - public class BanCommand extends Command { RixaPermission permission; - public BanCommand(String command, RixaPermission permission, String descriptopn) { - super(command, permission, descriptopn); + public BanCommand(String command, RixaPermission permission, String description, CommandType commandType) { + super(command, permission, description, commandType); this.permission = permission; } @@ -29,7 +26,7 @@ public class BanCommand extends Command { MessageFactory.create( String.format("Incorrect Usage! Example: `%s%s @User`", rixaGuild.getSettings().getPrefix(), command)).setColor(member.getColor()).queue(channel); - + return; } } diff --git a/src/main/java/io/rixa/bot/commands/cmds/moderator/ClearCommand.java b/src/main/java/io/rixa/bot/commands/cmds/moderator/ClearCommand.java index 28dd713..6264598 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/moderator/ClearCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/moderator/ClearCommand.java @@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.moderator; import io.rixa.bot.Rixa; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -25,9 +26,9 @@ public class ClearCommand extends Command { @Getter private RixaPermission rixaPermission; - public ClearCommand(String command, RixaPermission rixaPermission, String description, + public ClearCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType, List aliases) { - super(command, rixaPermission, description, aliases); + super(command, rixaPermission, description, commandType, aliases); this.rixaPermission = rixaPermission; } diff --git a/src/main/java/io/rixa/bot/commands/cmds/moderator/MuteCommand.java b/src/main/java/io/rixa/bot/commands/cmds/moderator/MuteCommand.java index d846c3b..11e5741 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/moderator/MuteCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/moderator/MuteCommand.java @@ -3,6 +3,7 @@ package io.rixa.bot.commands.cmds.moderator; import com.dumptruckman.taskmin.Task; import com.dumptruckman.taskmin.TaskManager; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -13,17 +14,15 @@ import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Role; import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.User; public class MuteCommand extends Command { - - private RixaPermission rixaPermission; private TaskManager taskManager; - public MuteCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); - this.rixaPermission = rixaPermission; + public MuteCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); this.taskManager = TaskManager.createBasicTaskManager(); } @@ -31,22 +30,34 @@ public class MuteCommand extends Command { public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) { RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild); + if (args.length < 2) { + MessageFactory.create(String.format + ("Incorrect Usage! Example: `%s%s [reason]`", + rixaGuild.getSettings().getPrefix(), commandLabel)) + .setColor(member.getColor()) + .queue(channel); + return; + } String argumentString = String.join(" ", args); Object[] objArray = DiscordUtils.memberSearchArray(guild, argumentString, false); if (objArray.length == 0) { MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel); return; } - Member targetMember = (Member) objArray[1]; String targetMemberName = String.valueOf(objArray[0]); + Member targetMember = (Member) objArray[1]; if (targetMember == null) { MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel); return; } argumentString = argumentString.replaceFirst(targetMemberName, "").trim(); args = argumentString.split(" "); - if (args[0].length() == 0) { - // Incorrect Usage + if (args.length == 0) { + MessageFactory.create(String.format + ("Incorrect Usage! Example: `%s%s [reason]`", + rixaGuild.getSettings().getPrefix(), commandLabel)) + .setColor(member.getColor()) + .queue(channel); return; } String time = args[0].trim(); @@ -61,13 +72,16 @@ public class MuteCommand extends Command { long milliseconds = Utils.toMilliSec(time); String reason = argumentString; - guild.getController().addRolesToMember(targetMember, rixaGuild.getSettings().getMuteRole()) + + Role muteRole = rixaGuild.getSettings().getMuteRole() == null + ? DiscordUtils.createMuteRole(guild) : rixaGuild.getSettings().getMuteRole(); + guild.getController().addRolesToMember(targetMember, muteRole) .queue(onSuccess -> MessageFactory.create(String.format( "Temporarily muted %s for %s\n Reason: %s", this.getUser(targetMember.getUser()), this.getTime(milliseconds), reason)) - .setColor(member.getColor()).setTimestamp().queue(channel), + .setColor(member.getColor()).setTimestamp().queue(channel), onFailure -> MessageFactory.create( "Could not successfully mute user `" + targetMember.getUser().getName() + "#" + targetMember.getUser() @@ -89,7 +103,8 @@ public class MuteCommand extends Command { days = hours / 24; minutes = minutes % 60; - return(String.format("%s days, %s hours, %s minutes, %s seconds", days, hours, minutes, seconds)); + return (String + .format("%s days, %s hours, %s minutes, %s seconds", days, hours, minutes, seconds)); } private String getUser(User member) { diff --git a/src/main/java/io/rixa/bot/commands/cmds/other/ShutdownCommand.java b/src/main/java/io/rixa/bot/commands/cmds/other/ShutdownCommand.java index e9cbba8..bfad529 100644 --- a/src/main/java/io/rixa/bot/commands/cmds/other/ShutdownCommand.java +++ b/src/main/java/io/rixa/bot/commands/cmds/other/ShutdownCommand.java @@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.other; import io.rixa.bot.Rixa; import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.handler.CommandType; import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.manager.GuildManager; @@ -13,8 +14,8 @@ import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; public class ShutdownCommand extends Command { - public ShutdownCommand(String command, RixaPermission rixaPermission, String description) { - super(command, rixaPermission, description); + public ShutdownCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) { + super(command, rixaPermission, description, commandType); } @Override diff --git a/src/main/java/io/rixa/bot/commands/exceptions/ReactNotFoundException.java b/src/main/java/io/rixa/bot/commands/exceptions/ReactNotFoundException.java new file mode 100644 index 0000000..fa4f560 --- /dev/null +++ b/src/main/java/io/rixa/bot/commands/exceptions/ReactNotFoundException.java @@ -0,0 +1,8 @@ +package io.rixa.bot.commands.exceptions; + +public class ReactNotFoundException extends Exception { + + public ReactNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/io/rixa/bot/commands/handler/CommandHandler.java b/src/main/java/io/rixa/bot/commands/handler/CommandHandler.java index 1c44da4..0f8c5ca 100644 --- a/src/main/java/io/rixa/bot/commands/handler/CommandHandler.java +++ b/src/main/java/io/rixa/bot/commands/handler/CommandHandler.java @@ -31,4 +31,8 @@ public class CommandHandler { } throw new CommandNotFoundException("Could not find command"); } + + public Map getAllCommands() { + return this.commandMap; + } } \ No newline at end of file diff --git a/src/main/java/io/rixa/bot/commands/handler/CommandType.java b/src/main/java/io/rixa/bot/commands/handler/CommandType.java new file mode 100644 index 0000000..5e660cf --- /dev/null +++ b/src/main/java/io/rixa/bot/commands/handler/CommandType.java @@ -0,0 +1,8 @@ +package io.rixa.bot.commands.handler; + +public enum CommandType { + + STAFF, + USER, + OWNER; +} diff --git a/src/main/java/io/rixa/bot/events/MessageListener.java b/src/main/java/io/rixa/bot/events/MessageListener.java index c259da0..d3ccd79 100644 --- a/src/main/java/io/rixa/bot/events/MessageListener.java +++ b/src/main/java/io/rixa/bot/events/MessageListener.java @@ -15,10 +15,16 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent; import net.dv8tion.jda.core.hooks.SubscribeEvent; public class MessageListener { + @SubscribeEvent + public void onReactionAdded(GuildMessageReactionAddEvent event) { + if (event.getUser().isBot()) return; + } + @SubscribeEvent public void onMessage(GuildMessageReceivedEvent event) { if (event.getAuthor().isBot()) { @@ -26,7 +32,8 @@ public class MessageListener { } String message = event.getMessage().getContentRaw().trim(); RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild()); - if (event.getMessage().getContentDisplay().startsWith("@" + event.getGuild().getSelfMember().getEffectiveName())) { + if (event.getMessage().getContentDisplay() + .startsWith("@" + event.getGuild().getSelfMember().getEffectiveName())) { String chat = event.getMessage().getContentDisplay(); chatter(rixaGuild, event.getChannel(), chat.replace("@" + event.getGuild().getSelfMember().getEffectiveName(), "")); @@ -62,7 +69,8 @@ public class MessageListener { //command.execute(event); event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS); RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild()); - if (command.getPermission() != null && command.getPermission() != RixaPermission.NONE && + if (!event.getGuild().getOwner().getUser().getId().equalsIgnoreCase(event.getAuthor().getId()) + && command.getPermission() != null && command.getPermission() != RixaPermission.NONE && (!rixaGuild.hasPermission(event.getMember().getUser(), command.getPermission())) && (!Rixa.getInstance().getConfiguration().isBotAdmin(event.getAuthor().getId()))) { MessageFactory.create("Sorry! You do not have permission for this command!") diff --git a/src/main/java/io/rixa/bot/reactions/React.java b/src/main/java/io/rixa/bot/reactions/React.java new file mode 100644 index 0000000..f858176 --- /dev/null +++ b/src/main/java/io/rixa/bot/reactions/React.java @@ -0,0 +1,10 @@ +package io.rixa.bot.reactions; + +import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent; + +public interface React { + + void onReact(GuildMessageReactionAddEvent event); + + String getName(); +} diff --git a/src/main/java/io/rixa/bot/reactions/ReactManager.java b/src/main/java/io/rixa/bot/reactions/ReactManager.java new file mode 100644 index 0000000..d4a5ace --- /dev/null +++ b/src/main/java/io/rixa/bot/reactions/ReactManager.java @@ -0,0 +1,37 @@ +package io.rixa.bot.reactions; + +import io.rixa.bot.commands.Command; +import io.rixa.bot.commands.exceptions.CommandNotFoundException; +import io.rixa.bot.commands.exceptions.ReactNotFoundException; +import java.util.HashMap; +import java.util.Map; + +public class ReactManager { + + private Map reactMap = new HashMap<>(); + + + private void registerReact(React react) { + if (this.reactMap.containsKey(react.getName())) { + return; + } + this.reactMap.put(react.getName(), react); + } + + public void registerReact(React... reacts) { + for (React react : reacts) { + registerReact(react); + } + } + + public React getReaction(String react) throws ReactNotFoundException { + if (reactMap.containsKey(react.toLowerCase())) { + return reactMap.get(react.toLowerCase()); + } + throw new ReactNotFoundException("Could not find reaction"); + } + + public Map getAllReactions() { + return this.reactMap; + } +} diff --git a/src/main/java/io/rixa/bot/reactions/react/HelpReaction.java b/src/main/java/io/rixa/bot/reactions/react/HelpReaction.java new file mode 100644 index 0000000..4ff2e4c --- /dev/null +++ b/src/main/java/io/rixa/bot/reactions/react/HelpReaction.java @@ -0,0 +1,118 @@ +package io.rixa.bot.reactions.react; + +import io.rixa.bot.Rixa; +import io.rixa.bot.commands.handler.CommandHandler; +import io.rixa.bot.guild.RixaGuild; +import io.rixa.bot.guild.manager.GuildManager; +import io.rixa.bot.reactions.React; +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.Message; +import net.dv8tion.jda.core.entities.MessageEmbed; +import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent; +import net.dv8tion.jda.core.exceptions.ErrorResponseException; +import net.dv8tion.jda.core.hooks.SubscribeEvent; + +public class HelpReaction implements React { + + @Override + @SubscribeEvent + public void onReact(GuildMessageReactionAddEvent event) { + if (event.getUser().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) { + return; + } + Message message = event.getChannel().getMessageById(event.getMessageId()).complete(); + MessageEmbed messageEmbed = message.getEmbeds().get(0); + if (!messageEmbed.getTitle().contains(": ")) { + return; + } + String title = messageEmbed.getTitle().split(": ")[1]; + RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getJDA().getGuildById(title)); + if (rixaGuild == null) { + return; + } + String prefix = rixaGuild.getSettings().getPrefix(); + EmbedBuilder embedBuilder; + try { + switch (event.getReaction().getReactionEmote().getName()) { + case "\uD83D\uDDD1":// waste bin + if (message.getAuthor().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) { + message.delete().complete(); + } + break; + case "\u0031\u20E3":// one emoji + embedBuilder = new EmbedBuilder(); + String stringBuilder = "\u2753" + + " **General Commands Help**" + + "\n" + + "Click a number below for information about other commands."; + embedBuilder.setTitle(String.format("Help: %s", title)); + embedBuilder.setDescription(stringBuilder); + Rixa.getInstance().getCommandHandler().getAllCommands().values() + .forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommand(), + cmd.getDescription(), false)); + message.editMessage(embedBuilder.build()).queue(); + break; + /*case "\u0032\u20E3": // two emoji + embedBuilder = new EmbedBuilder(); + stringBuilder = "\u2753" + + " **Staff Commands Help**" + + "\n" + + "Click a number below for information about other commands."; + embedBuilder.setTitle(String.format("Help: %s", title)); + embedBuilder.setDescription(stringBuilder); + Rixa.getInstance().getCommandHandler().getAllCommands().values().stream() + .filter(cmd -> cmd.getAnnotation().type() == CommandType.ADMIN + || cmd.getAnnotation().type() == CommandType.MOD) + .forEach(cmd -> embedBuilder.addField(prefix + cmd.getAnnotation().mainCommand(), + cmd.getAnnotation().description(), false)); + message.editMessage(embedBuilder.build()).queue(); + break;*/ + case "\u0033\u20E3": // three emoji + embedBuilder = new EmbedBuilder(); + stringBuilder = "\u2753" + + " **Music Commands Help**" + + "\n" + + "Click a number below for information about other commands."; + embedBuilder.setTitle(String.format("Help: %s", title)); + embedBuilder.setDescription(stringBuilder); + embedBuilder.addField(prefix + "music join [name]", + "Joins a voice channel that has the provided name", false) + .addField(prefix + "music join [id]", + "Joins a voice channel based on the provided id.", false) + .addField(prefix + "music leave", + "Leaves the voice channel that the bot is currently in.", false) + .addField(prefix + "music play", + "Plays songs from the current queue. Starts playing again if it was previously paused", + false) + .addField(prefix + "music play [url]", + "Adds a new song to the queue and starts playing if it wasn't playing already", + false) + .addField(prefix + "music playlist", + "Adds a playlist to the queue and starts playing if not already playing", false) + .addField(prefix + "music pause", "Pauses audio playback", false) + .addField(prefix + "music stop", + "Completely stops audio playback, skipping the current song.", false) + .addField(prefix + "music skip", + "Skips the current song, automatically starting the next", false) + .addField(prefix + "music nowplaying", + "Prints information about the currently playing song (title, current time)", + false) + .addField(prefix + "music np", "Alias for nowplaying", false) + .addField(prefix + "music list", "Lists the songs in the queue", false) + .addField(prefix + "music volume [vol]", + "Sets the volume of the MusicPlayer [10 - 100]", false) + .addField(prefix + "music restart", + "Restarts the current song or restarts the previous song if there is no current song playing.", + false) + .addField(prefix + "music repeat", + "Makes the player repeat the currently playing song", false) + .addField(prefix + "music reset", + "Completely resets the player, fixing all errors and clearing the queue.", false) + .addField(prefix + "music shuffle", "Shuffle current music queue.", false); + message.editMessage(embedBuilder.build()).queue(); + break; + } + } catch (ErrorResponseException ignored) { + } + } +} diff --git a/src/main/java/io/rixa/bot/utils/DiscordUtils.java b/src/main/java/io/rixa/bot/utils/DiscordUtils.java index e255f06..2d391db 100644 --- a/src/main/java/io/rixa/bot/utils/DiscordUtils.java +++ b/src/main/java/io/rixa/bot/utils/DiscordUtils.java @@ -1,8 +1,12 @@ package io.rixa.bot.utils; +import java.awt.Color; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Optional; +import net.dv8tion.jda.core.Permission; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Role; @@ -127,4 +131,17 @@ public class DiscordUtils { } return xp; } + + public static Role createMuteRole(Guild guild) { + Role role = + guild.getController().createRole().setName("Mute") + .setColor(Color.DARK_GRAY).setMentionable(false) + .complete(); + guild.getTextChannels().forEach(textChannel -> + textChannel.createPermissionOverride(role).setPermissions(Arrays.asList( + Permission.MESSAGE_READ, Permission.MESSAGE_HISTORY), + Collections.singletonList( + Permission.MESSAGE_WRITE)).queue()); + return role; + } }