diff --git a/.idea/misc.xml b/.idea/misc.xml index c6d8fb7..9793229 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,13 +3,6 @@ - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3b7bed9..fe7dce5 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,16 @@ - + + + + + + + + + + @@ -28,7 +37,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -470,9 +538,20 @@ true DEFINITION_ORDER + + + + + + @@ -482,7 +561,7 @@ - + @@ -500,10 +579,10 @@ + - @@ -540,6 +619,10 @@ + + + + - + + + + + + + - + + + + + + + + - - + + - + + - + + - - + - + + - + - @@ -1132,7 +1352,19 @@ + + + + + + + + + + @@ -1142,18 +1374,11 @@ - - - - - - - - + @@ -1162,18 +1387,11 @@ - + - - - - - - - @@ -1181,27 +1399,10 @@ - - - - - - - - - - - - - - - - - @@ -1217,12 +1418,6 @@ - - - - - - @@ -1230,15 +1425,211 @@ + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java index f6bb40e..822b1bd 100644 --- a/src/main/java/me/savvy/rixa/Rixa.java +++ b/src/main/java/me/savvy/rixa/Rixa.java @@ -1,9 +1,15 @@ package me.savvy.rixa; +import me.savvy.rixa.commands.admin.BatchMoveCommand; import me.savvy.rixa.commands.general.HelpCommand; import me.savvy.rixa.commands.general.InfoCommand; +import me.savvy.rixa.commands.general.PingCommand; import me.savvy.rixa.commands.general.ServerInfoCommand; +import me.savvy.rixa.commands.handlers.CommandExec; import me.savvy.rixa.commands.handlers.CommandHandler; +import me.savvy.rixa.commands.mod.DeleteMessagesCommand; +import me.savvy.rixa.commands.mod.PurgeCommand; +import me.savvy.rixa.events.BotEvent; import me.savvy.rixa.events.MessageEvent; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; import me.savvy.rixa.modules.reactions.react.HelpReaction; @@ -32,28 +38,36 @@ public class Rixa { public static void main(String[] args) throws LoginException, InterruptedException, RateLimitedException { instance = new Rixa(); shardsList = new LinkedList<>(); - int shards = 4; - for(int i = 1; i < shards; i++){ + int shards = 3; + for(int i = 0; i < shards; i++) { Logger.getLogger("Rixa").info("Loading shard #" + i); JDABuilder jda = new JDABuilder(AccountType.BOT) - .setToken("MjkxNTM5Njg2NTEyNTI1MzMy.C6r1OA.-hRemXk-b3nP5GvT9kjh2V7RXDo") + .setToken("MjkxNTM5Njg2NTEyNTI1MzMy.DAZKfQ.kIHSmuCJHhklyC3gBAi0c_VKp-w") .setEventManager(new AnnotatedEventManager()) .addEventListener(new MessageEvent()) + .addEventListener(new BotEvent()) .setGame(Game.of("Rixa 1.0 | In Dev", "http://rixa.io")) .setAutoReconnect(true) .setStatus(OnlineStatus.ONLINE) .setAudioEnabled(true) .useSharding(i, shards); shardsList.add(jda.buildBlocking()); - Logger.getLogger("Rixa").info("Shard #" + i + " has been loaded"); + getInstance().getLogger().info("Shard #" + i + " has been loaded"); } timeUp = System.currentTimeMillis(); - CommandHandler.registerCommand(new InfoCommand()); - CommandHandler.registerCommand(new ServerInfoCommand()); - CommandHandler.registerCommand(new HelpCommand()); + register(new CommandExec[] { + new InfoCommand(), new ServerInfoCommand(), new HelpCommand(), + new DeleteMessagesCommand(), new PingCommand(), new PurgeCommand(), + new BatchMoveCommand() }); ReactionManager.registerReaction(new HelpReaction()); } + private static void register(CommandExec commandExecs[]) { + for (CommandExec command: commandExecs) { + CommandHandler.registerCommand(command); + } + } + public static Rixa getInstance() { return instance; } @@ -61,4 +75,8 @@ public class Rixa { public long getTimeUp() { return timeUp; } + + public Logger getLogger() { + return Logger.getLogger("Rixa"); + } } diff --git a/src/main/java/me/savvy/rixa/commands/admin/BatchMoveCommand.java b/src/main/java/me/savvy/rixa/commands/admin/BatchMoveCommand.java new file mode 100644 index 0000000..e60b738 --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/admin/BatchMoveCommand.java @@ -0,0 +1,57 @@ +package me.savvy.rixa.commands.admin; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.RixaPermission; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Role; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.PermissionException; + +import java.awt.*; +import java.util.List; + +/** + * Created by Timber on 5/23/2017. + */ +public class BatchMoveCommand implements CommandExec { + @Override + @Command(mainCommand = "batchmove", + aliases = "bmove", + description = "Move users within one role to another!", + channelType = ChannelType.TEXT) + public void execute(GuildMessageReceivedEvent event) { + RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild()); + if(!rixaGuild.hasPermission(event.getMember(), RixaPermission.CLEAR_CHAT)) { + new MessageBuilder(event.getMember().getAsMention() + ", you do not have permission for this command.").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + if(event.getMessage().getMentionedRoles().size() < 2) { + new MessageBuilder("You need to include two roles!").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + Role old_role = event.getMessage().getMentionedRoles().get(0); + Role new_role = event.getMessage().getMentionedRoles().get(1); + List userWithRole = event.getGuild().getMembersWithRoles(old_role); + new MessageBuilder("Moving **" + userWithRole.size() + "** users with role: " + old_role.getAsMention() + + " to " + new_role.getAsMention()).setColor(old_role.getColor()).queue(event.getChannel()); + int success = 0; + for(Member member: userWithRole) { + try { + event.getGuild().getController().removeRolesFromMember(member, old_role).queue(); + event.getGuild().getController().addRolesToMember(member, new_role).queue(); + success++; + } catch(PermissionException ex) { + new MessageBuilder("I do not have permission to modify " + member.getAsMention() + "'s role").setColor(Color.RED).queue(event.getChannel()); + } + } + if(success > 0) { + new MessageBuilder("Successfully moved **" + success + "** users to role " + + new_role.getAsMention()).setColor(new_role.getColor()).queue(event.getChannel()); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java index 76cca91..5c354a1 100644 --- a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java @@ -2,6 +2,7 @@ package me.savvy.rixa.commands.general; import me.savvy.rixa.commands.handlers.Command; import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.utils.MessageBuilder; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Message; @@ -34,8 +35,8 @@ public class HelpCommand implements CommandExec { .addField("3 - Music Commands", "Reveals usable commands to configure Rixa for your discord!", false) .setColor(event.getMember().getColor()); Message message = event.getAuthor().openPrivateChannel().complete().sendMessage(embedBuilder.build()).complete(); - event.getChannel().sendMessage(event.getMember().getAsMention() - + ", the help menu has been private messaged to you!").queue(); + new MessageBuilder(event.getMember().getAsMention() + + ", the help menu has been private messaged to you!").setColor(event.getMember().getColor()).queue(event.getChannel()); try { message.addReaction("\u0031\u20E3").queue(); message.addReaction("\u0032\u20E3").queue(); diff --git a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java index 4dec9e0..eee0ad3 100644 --- a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java @@ -1,9 +1,9 @@ package me.savvy.rixa.commands.general; import me.savvy.rixa.Rixa; -import com.lunaticdev.rixa.commands.handler.CommandType; import me.savvy.rixa.commands.handlers.Command; import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.CommandType; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.User; diff --git a/src/main/java/me/savvy/rixa/commands/general/PingCommand.java b/src/main/java/me/savvy/rixa/commands/general/PingCommand.java new file mode 100644 index 0000000..01bf4ae --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/general/PingCommand.java @@ -0,0 +1,21 @@ +package me.savvy.rixa.commands.general; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +/** + * Created by Timber on 5/23/2017. + */ +public class PingCommand implements CommandExec { + @Override + @Command(mainCommand = "ping", + aliases = "", + description = "Check your ping!", + channelType = ChannelType.TEXT) + public void execute(GuildMessageReceivedEvent event) { + new MessageBuilder("Pong!").setColor(event.getMember().getColor()).queue(event.getChannel()); + } +} diff --git a/src/main/java/me/savvy/rixa/commands/handlers/RixaPermission.java b/src/main/java/me/savvy/rixa/commands/handlers/RixaPermission.java new file mode 100644 index 0000000..c656477 --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/handlers/RixaPermission.java @@ -0,0 +1,10 @@ +package me.savvy.rixa.commands.handlers; + +/** + * Created by Timber on 5/23/2017. + */ +public enum RixaPermission { + + MUTE, ADD_ROLE, REMOVE_ROLE, CLEAR_CHAT, ACCESS_CONFIG, PM_MESSAGE, KICK_MEMBER, BAN_MEMBER + +} diff --git a/src/main/java/me/savvy/rixa/commands/mod/DeleteMessagesCommand.java b/src/main/java/me/savvy/rixa/commands/mod/DeleteMessagesCommand.java new file mode 100644 index 0000000..204f0b0 --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/mod/DeleteMessagesCommand.java @@ -0,0 +1,76 @@ +package me.savvy.rixa.commands.mod; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.commands.handlers.RixaPermission; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; +import me.savvy.rixa.utils.MessageBuilder; +import me.savvy.rixa.utils.Utils; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Message; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.PermissionException; +import net.dv8tion.jda.core.requests.RestAction; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Timber on 5/23/2017. + */ +public class DeleteMessagesCommand implements CommandExec { + @Override + @Command(mainCommand = "clear", + aliases = { "delmessages", "dmessages", "delmsg", "deletemessages" }, + description = "Clear messages from chat!", + channelType = ChannelType.TEXT, + type = CommandType.MOD, + usage = "%pclear") + public void execute(GuildMessageReceivedEvent event) { + RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild()); + if(!rixaGuild.hasPermission(event.getMember(), RixaPermission.CLEAR_CHAT)) { + new MessageBuilder(event.getMember().getAsMention() + ", you do not have permission for this command.").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + String[] messages = event.getMessage().getContent().split(" "); + if(messages.length < 2) { + new MessageBuilder(event.getMember().getAsMention() + ", please enter an amount. Example /delmessages 5").setColor(event.getMember().getColor()).queue(event.getChannel()); + messages = null; + return; + } + if(!Utils.isInt(messages[1])) { + new MessageBuilder(event.getMember().getAsMention() + ", Amount must be a number. Example /delmessages 3").setColor(event.getMember().getColor()).queue(event.getChannel()); + messages = null; + return; + } + int amount = Integer.parseInt(messages[1]); + if (amount < 2 || amount > 100) { + new MessageBuilder(event.getMember().getAsMention() + ", please provide at least 2 or at most 100 messages to be deleted").setColor(event.getMember().getColor()).queue(event.getChannel()); + messages = null; + return; + } + try { + RestAction> messageList = event.getChannel().getHistory().retrievePast(amount); + List messages1 = new ArrayList(); + messageList.complete().forEach(message -> { + if(!event.getChannel().getPinnedMessages().complete().contains(message)) { + messages1.add(message); + } + }); + event.getChannel().deleteMessages(messages1).complete(); + new MessageBuilder(event.getMember().getAsMention() + " has cleared **" + amount + "** messages from the chat history.").setColor(event.getMember().getColor()).queue(event.getChannel()); + } catch (PermissionException ex) { + try { + new MessageBuilder(event.getMember().getAsMention() + ", sorry I do not have permission for this!").setColor(event.getMember().getColor()).queue(event.getChannel()); + } catch (PermissionException e) { + event.getAuthor() + .openPrivateChannel().complete() + .sendMessage(event.getMember().getAsMention() + ", sorry I do not have permission for this!").queue(); + } + } catch(IllegalArgumentException ex) { + new MessageBuilder(event.getMember().getAsMention() + ", sorry I do not have permission for this!").setColor(event.getMember().getColor()).queue(event.getChannel()); + } + } +} diff --git a/src/main/java/me/savvy/rixa/commands/mod/PurgeCommand.java b/src/main/java/me/savvy/rixa/commands/mod/PurgeCommand.java new file mode 100644 index 0000000..859166d --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/mod/PurgeCommand.java @@ -0,0 +1,90 @@ +package me.savvy.rixa.commands.mod; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.commands.handlers.RixaPermission; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; +import me.savvy.rixa.utils.MessageBuilder; +import me.savvy.rixa.utils.Utils; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Message; +import net.dv8tion.jda.core.entities.TextChannel; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.PermissionException; +import net.dv8tion.jda.core.requests.RestAction; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Timber on 5/23/2017. + */ +public class PurgeCommand implements CommandExec { + + @Override + @Command(mainCommand = "purge", + aliases = { "pmessages", "purgemessages", "purgeuser" }, + description = "Remove a users messages!", + channelType = ChannelType.TEXT, + type = CommandType.MOD, + usage = "%ppurge") + public void execute(GuildMessageReceivedEvent event) { + RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild()); + if(!rixaGuild.hasPermission(event.getMember(), RixaPermission.CLEAR_CHAT)) { + new MessageBuilder(event.getMember().getAsMention() + ", you do not have permission for this command.").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + if(event.getMessage().getMentionedUsers().size() < 1) { + new MessageBuilder(event.getMember().getAsMention() + ", could not find user. Try /purge ").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + String[] message = event.getMessage().getContent().split(" "); + if(message.length < 2) { + new MessageBuilder(event.getMember().getAsMention() + ", incorrect usage. Example /purge [amount]").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + int amount = 100; + for(String s: message) { + if(Utils.isInt(s)) { + amount = Integer.parseInt(s); + break; + } + } + Member memberToDel = event.getGuild().getMember(event.getMessage().getMentionedUsers().get(0)); + deleteMessage(event.getChannel(), event.getMember(), memberToDel, amount); + } + + private void deleteMessage(TextChannel channel, Member user, Member userToDel, int amount) { + try { + RestAction> messageList = channel.getHistory().retrievePast(amount); + List messages = messageList.complete(); + int newAmount = messages.size(); + if(userToDel != null) { + List newMsgs = new ArrayList<>(); + for(Message message: messages) { + if(message.getAuthor().getId().equals(userToDel.getUser().getId())) { + newMsgs.add(message); + } + } + newAmount = newMsgs.size(); + channel.deleteMessages(newMsgs).complete(); + } else { + channel.deleteMessages(messages).complete(); + } + new MessageBuilder(user.getAsMention() + " has cleared **" + newAmount + "** messages from the chat history.").setColor(user.getColor()).queue(channel); + } catch (PermissionException ex) { + try { + new MessageBuilder(user.getAsMention() + ", sorry I do not have permission for this!").setColor(user.getColor()).queue(channel); + } catch (PermissionException e) { + user.getUser() + .openPrivateChannel().complete() + .sendMessage(user.getAsMention() + ", sorry I do not have permission for this!").queue(); + } + } catch (IllegalArgumentException ex) { + new MessageBuilder(user.getAsMention() + ", sorry I cannot delete messages older than 2 weeks!").setColor(user.getColor()).queue(channel); + } + } +} diff --git a/src/main/java/me/savvy/rixa/events/BotEvent.java b/src/main/java/me/savvy/rixa/events/BotEvent.java new file mode 100644 index 0000000..0c91cea --- /dev/null +++ b/src/main/java/me/savvy/rixa/events/BotEvent.java @@ -0,0 +1,31 @@ +package me.savvy.rixa.events; + +import me.savvy.rixa.Rixa; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; +import net.dv8tion.jda.core.events.ReadyEvent; +import net.dv8tion.jda.core.events.guild.GuildJoinEvent; +import net.dv8tion.jda.core.events.guild.GuildLeaveEvent; +import net.dv8tion.jda.core.hooks.SubscribeEvent; + +/** + * Created by Timber on 5/23/2017. + */ +public class BotEvent { + + @SubscribeEvent + public void onJoin(GuildJoinEvent event) { + new RixaGuild(event.getGuild()); + } + + @SubscribeEvent + public void onReady(ReadyEvent event) { + Rixa.getInstance().getLogger().info("Successfully loaded..."); + event.getJDA().getGuilds().forEach(RixaGuild::new); + } + + @SubscribeEvent + public void onQuit(GuildLeaveEvent event) { + RixaManager.removeGuild(RixaManager.getGuild(event.getGuild())); + } +} diff --git a/src/main/java/me/savvy/rixa/events/MessageEvent.java b/src/main/java/me/savvy/rixa/events/MessageEvent.java index fc7fd09..2f5e563 100644 --- a/src/main/java/me/savvy/rixa/events/MessageEvent.java +++ b/src/main/java/me/savvy/rixa/events/MessageEvent.java @@ -3,6 +3,8 @@ package me.savvy.rixa.events; import com.mysql.jdbc.StringUtils; import me.savvy.rixa.commands.handlers.CommandHandler; import me.savvy.rixa.commands.handlers.CommandRegistrar; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.RixaManager; import me.savvy.rixa.modules.reactions.handlers.ReactRegistrar; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; import net.dv8tion.jda.core.entities.Message; @@ -21,14 +23,16 @@ public class MessageEvent { @SubscribeEvent public void handle(GuildMessageReceivedEvent event) { if (event.getGuild() == null) return; - String prefix = "/"; - if (!event.getMessage().getContent().startsWith(prefix)) return; - // Map commands = CommandHandler.getCommands(); + RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild()); + String prefix = rixaGuild + .getGuildSettings() + .getPrefix(); + if (!event.getMessage().getContent().startsWith(prefix)) {return; } + String[] splitContent = event.getMessage().getContent().replace(prefix, "").split(" "); - if(!CommandHandler.hasCommand(splitContent[0])) { return; } - //if (!commands.containsKey(splitContent[0])) return; + if(!CommandHandler.hasCommand(splitContent[0])) { + return; } CommandRegistrar cmd = CommandHandler.get(splitContent[0]); - //CommandRegistrar cmd = commands.get(splitContent[0]); Method m = cmd.getMethod(); try { m.invoke(cmd.getExecutor(), event); diff --git a/src/main/java/me/savvy/rixa/extras/polls/Poll.java b/src/main/java/me/savvy/rixa/extras/polls/Poll.java new file mode 100644 index 0000000..208d284 --- /dev/null +++ b/src/main/java/me/savvy/rixa/extras/polls/Poll.java @@ -0,0 +1,11 @@ +package me.savvy.rixa.extras.polls; + +/** + * Created by Timber on 5/23/2017. + */ +public class Poll { + + public Poll() { + + } +} diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java new file mode 100644 index 0000000..4d0174d --- /dev/null +++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java @@ -0,0 +1,49 @@ +package me.savvy.rixa.guild; + +import me.savvy.rixa.commands.handlers.RixaPermission; +import me.savvy.rixa.guild.management.GuildSettings; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Member; + +/** + * Created by Timber on 5/23/2017. + */ +public class RixaGuild { + + private Guild guild; + private GuildSettings guildSettings; + + public RixaGuild(Guild guild) { + this.guild = guild; + load(); + } + + private void load() { + if(check()) return; + setGuildSettings(new GuildSettings(this.guild)); + RixaManager.addGuild(this); + } + + public GuildSettings getGuildSettings() { + return (guildSettings == null) ? this.guildSettings = new GuildSettings(getGuild()) : guildSettings; + } + + public void setGuildSettings(GuildSettings guildSettings) { + this.guildSettings = guildSettings; + } + + /** + * TODO: Check if Guild exists in database if not create new instance; + */ + public boolean check() { + return guildSettings == null; + } + + public Guild getGuild() { + return guild; + } + + public boolean hasPermission(Member member, RixaPermission clearChat) { + return member.getUser().getId().equalsIgnoreCase("202944101333729280"); + } +} diff --git a/src/main/java/me/savvy/rixa/guild/RixaManager.java b/src/main/java/me/savvy/rixa/guild/RixaManager.java new file mode 100644 index 0000000..f6606d9 --- /dev/null +++ b/src/main/java/me/savvy/rixa/guild/RixaManager.java @@ -0,0 +1,39 @@ +package me.savvy.rixa.guild; + +import net.dv8tion.jda.core.entities.Guild; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Timber on 5/23/2017. + */ +public class RixaManager { + + private static Map guilds = new HashMap<>(); + + public static Map getGuilds() { + return guilds; + } + + public static void addGuild(RixaGuild guild) { + if(check(guild.getGuild())) return; + guilds.put(guild.getGuild().getId(), guild); + } + + public static RixaGuild getGuild(Guild guild) { + if(!check(guild)) { + addGuild(new RixaGuild(guild)); + } + return guilds.get(guild.getId()); + } + + public static void removeGuild(RixaGuild guild) { + if(!check(guild.getGuild())) return; + guilds.remove(guild.getGuild().getId()); + } + + private static boolean check(Guild guild) { + return guilds.containsKey(guild.getId()); + } +} diff --git a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java new file mode 100644 index 0000000..48020c2 --- /dev/null +++ b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java @@ -0,0 +1,87 @@ +package me.savvy.rixa.guild.management; + +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.TextChannel; + +/** + * Created by Timber on 5/23/2017. + */ +public class GuildSettings { + + private Guild guild; + private String prefix = ".", defaultRole, joinMessage, quitMessage, joinPrivateMessage; + private TextChannel joinMessageChannel, quitMessageChannel; + + public GuildSettings(Guild guild) { + this.guild = guild; + load(); + } + + private void load() { + + } + + public void unload() { + + } + + public Guild getGuild() { + return guild; + } + + public String getJoinMessage() { + return joinMessage; + } + + public void setJoinMessage(String joinMessage) { + this.joinMessage = joinMessage; + } + + public String getQuitMessage() { + return quitMessage; + } + + public void setQuitMessage(String quitMessage) { + this.quitMessage = quitMessage; + } + + public String getJoinPrivateMessage() { + return joinPrivateMessage; + } + + public void setJoinPrivateMessage(String joinPrivateMessage) { + this.joinPrivateMessage = joinPrivateMessage; + } + + public TextChannel getJoinMessageChannel() { + return joinMessageChannel; + } + + public void setJoinMessageChannel(TextChannel joinMessageChannel) { + this.joinMessageChannel = joinMessageChannel; + } + + public TextChannel getQuitMessageChannel() { + return quitMessageChannel; + } + + public void setQuitMessageChannel(TextChannel quitMessageChannel) { + this.quitMessageChannel = quitMessageChannel; + } + + public String getDefaultRole() { + return defaultRole; + } + + public void setDefaultRole(String defaultRole) { + this.defaultRole = defaultRole; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } +} diff --git a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java index 761c3a8..913dab5 100644 --- a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java +++ b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java @@ -1,7 +1,8 @@ package me.savvy.rixa.modules.reactions.react; -import com.lunaticdev.rixa.commands.handler.CommandHandler; -import com.lunaticdev.rixa.commands.handler.CommandType; +import me.savvy.rixa.commands.handlers.CommandHandler; +import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.guild.RixaManager; import me.savvy.rixa.modules.reactions.handlers.React; import me.savvy.rixa.modules.reactions.handlers.ReactHandle; import net.dv8tion.jda.core.EmbedBuilder; @@ -23,6 +24,8 @@ public class HelpReaction implements React { return; } Message message = event.getChannel().getMessageById(event.getMessageId()).complete(); + String prefix = (event.getChannel().getType() != ChannelType.PRIVATE) ? + RixaManager.getGuild(event.getGuild()).getGuildSettings().getPrefix() : "/"; EmbedBuilder embedBuilder; try { switch(event.getReaction().getEmote().getName()) { @@ -39,9 +42,10 @@ public class HelpReaction implements React { "Click a number below for information about other commands."; embedBuilder.setTitle("Help", "http://rixa.io"); embedBuilder.setDescription(stringBuilder); - CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getType() == CommandType.USER) - .forEach(cmd -> embedBuilder.addField("/"/*prefix*/ + cmd.getPrefix(), cmd.getDescription(), false)); - message.editMessage(embedBuilder.build()).queue();// = event.getChannel().sendMessage(embedBuilder.build()).complete(); + CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.USER) + .forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommandAnnotation().mainCommand(), + cmd.getCommandAnnotation().description(), false)); + message.editMessage(embedBuilder.build()).queue(); break; case "\u0032\u20E3": // two emoji embedBuilder = new EmbedBuilder(); @@ -51,8 +55,9 @@ public class HelpReaction implements React { "Click a number below for information about other commands."; embedBuilder.setTitle("Help", "http://rixa.io"); embedBuilder.setDescription(stringBuilder); - CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getType() == CommandType.ADMIN || cmd.getType() == CommandType.MOD) - .forEach(cmd -> embedBuilder.addField("/"/*prefix*/ + cmd.getPrefix(), cmd.getDescription(), false)); + CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.ADMIN + || cmd.getCommandAnnotation().type() == CommandType.MOD) + .forEach(cmd -> embedBuilder.addField(prefix, cmd.getCommandAnnotation().description(), false)); message.editMessage(embedBuilder.build()).queue(); break; case "\u0033\u20E3": // three emoji @@ -63,7 +68,6 @@ public class HelpReaction implements React { "Click a number below for information about other commands."; embedBuilder.setTitle("Help", "http://rixa.io"); embedBuilder.setDescription(stringBuilder); - String prefix = "/"; 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) diff --git a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java new file mode 100644 index 0000000..2efd81d --- /dev/null +++ b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java @@ -0,0 +1,49 @@ +package me.savvy.rixa.utils; + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.MessageEmbed; +import net.dv8tion.jda.core.entities.TextChannel; + +import java.awt.*; + +/** + * Created by Timber on 5/23/2017. + */ +public class MessageBuilder { + + private EmbedBuilder builder; + public MessageBuilder(String description) { + this.builder = new EmbedBuilder().setDescription(description); + } + + public MessageBuilder setTitle(String title, String url) { + builder.setTitle(title, url); + return this; + } + + public MessageBuilder setTitle(String title) { + setTitle(title, "http://rixa.io/"); + return this; + } + + public MessageBuilder setColor(Color color) { + builder.setColor(color); + return this; + } + + public EmbedBuilder getBuilder() { + return builder; + } + + public void queue(TextChannel channel) { + channel.sendMessage(builder.build()).queue(); + } + + public void complete(TextChannel channel) { + channel.sendMessage(builder.build()).complete(); + } + + public MessageEmbed build() { + return builder.build(); + } +} diff --git a/src/main/java/me/savvy/rixa/utils/Utils.java b/src/main/java/me/savvy/rixa/utils/Utils.java new file mode 100644 index 0000000..7aadeca --- /dev/null +++ b/src/main/java/me/savvy/rixa/utils/Utils.java @@ -0,0 +1,16 @@ +package me.savvy.rixa.utils; + +/** + * Created by Timber on 5/23/2017. + */ +public class Utils { + + public static boolean isInt(String s) { + try { + Integer.parseInt(s); + return true; + } catch (NumberFormatException ex) { + return false; + } + } +}