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 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -38,6 +82,9 @@
+
+
+
@@ -470,9 +538,20 @@
true
DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -482,7 +561,7 @@
-
+
@@ -500,10 +579,10 @@
+
-
@@ -540,6 +619,10 @@
+
+
+
+
@@ -567,6 +650,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -627,7 +804,7 @@
-
+
@@ -648,11 +825,35 @@
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1067,6 +1268,14 @@
+
+
+
+
+
+
+
+
@@ -1079,42 +1288,53 @@
1495479808992
-
+
+
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
+
-
+
+
-
-
+
-
+
+
-
+
-
@@ -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;
+ }
+ }
+}