diff --git a/.gradle/2.13/taskArtifacts/cache.properties.lock b/.gradle/2.13/taskArtifacts/cache.properties.lock index f0bb6bc..cae8b17 100644 Binary files a/.gradle/2.13/taskArtifacts/cache.properties.lock and b/.gradle/2.13/taskArtifacts/cache.properties.lock differ diff --git a/.gradle/2.13/taskArtifacts/fileHashes.bin b/.gradle/2.13/taskArtifacts/fileHashes.bin index eaeec7e..91b6831 100644 Binary files a/.gradle/2.13/taskArtifacts/fileHashes.bin and b/.gradle/2.13/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/2.13/taskArtifacts/fileSnapshots.bin b/.gradle/2.13/taskArtifacts/fileSnapshots.bin index 73133bb..64a422e 100644 Binary files a/.gradle/2.13/taskArtifacts/fileSnapshots.bin and b/.gradle/2.13/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/2.13/taskArtifacts/taskArtifacts.bin b/.gradle/2.13/taskArtifacts/taskArtifacts.bin index 85463a5..93d2777 100644 Binary files a/.gradle/2.13/taskArtifacts/taskArtifacts.bin and b/.gradle/2.13/taskArtifacts/taskArtifacts.bin differ diff --git a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml index b66e8b8..1bad8c9 100644 --- a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml +++ b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml @@ -2,11 +2,8 @@ - - - - + \ No newline at end of file diff --git a/.idea/libraries/Gradle__net_sf_trove4j_trove4j_3_0_3.xml b/.idea/libraries/Gradle__net_sf_trove4j_trove4j_3_0_3.xml index 43ec32e..7e69dc8 100644 --- a/.idea/libraries/Gradle__net_sf_trove4j_trove4j_3_0_3.xml +++ b/.idea/libraries/Gradle__net_sf_trove4j_trove4j_3_0_3.xml @@ -2,8 +2,11 @@ + - + + + \ No newline at end of file diff --git a/.idea/modules/Rixa_main.iml b/.idea/modules/Rixa_main.iml index 7606438..6626c8d 100644 --- a/.idea/modules/Rixa_main.iml +++ b/.idea/modules/Rixa_main.iml @@ -1,7 +1,7 @@ - + diff --git a/.idea/modules/Rixa_test.iml b/.idea/modules/Rixa_test.iml index 1f38323..3da79b3 100644 --- a/.idea/modules/Rixa_test.iml +++ b/.idea/modules/Rixa_test.iml @@ -1,7 +1,7 @@ - + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6046760..6ed53bc 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,12 +2,8 @@ - -<<<<<<< HEAD -======= - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 + @@ -25,7 +21,6 @@ - @@ -45,135 +40,45 @@ -<<<<<<< HEAD - - - - - -======= - - - - - - - - - - + + + - - + + - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 - - - - - -<<<<<<< HEAD - - - - - -======= - - - - - - - - - - - - - - - - - - - - - - - - - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 - - - - - - - - - - - - - - - - + + + + + + + + + @@ -232,7 +137,7 @@ @@ -655,7 +560,6 @@ @@ -724,19 +623,11 @@ -<<<<<<< HEAD - - - - - - - - @@ -2165,48 +1468,149 @@ -======= - - - - - - - - - - - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 - - - - - -<<<<<<< HEAD - - -======= - - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 - -<<<<<<< HEAD -======= - - ->>>>>>> 72304bb14ceff865c5e525ea00e77760a05af553 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java index 0bc5148..566e260 100644 --- a/src/main/java/me/savvy/rixa/Rixa.java +++ b/src/main/java/me/savvy/rixa/Rixa.java @@ -103,8 +103,9 @@ public class Rixa { new DeleteMessagesCommand(), new PingCommand(), new PurgeMessagesCommand(), new BatchMoveCommand(), new MuteCommand(), new MusicCommand(), new ConfigCommand(), new UrbanDictionaryCommand(), new YoutubeCommand(), - new AddRoleCommand(), new RemoveRoleCommand(), new LevelsCommand()}); - register(new React[] {new HelpReaction(), new ConfigReaction()}); + new AddRoleCommand(), new RemoveRoleCommand(), new LevelsCommand(), + new LeaderboardCommand()}); + register(new React[] {new HelpReaction(), new ConfigReaction() }); data = new Data(DataType.SQL); } diff --git a/src/main/java/me/savvy/rixa/commands/general/LeaderboardCommand.java b/src/main/java/me/savvy/rixa/commands/general/LeaderboardCommand.java new file mode 100644 index 0000000..0be2205 --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/general/LeaderboardCommand.java @@ -0,0 +1,30 @@ +package me.savvy.rixa.commands.general; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Message; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +public class LeaderboardCommand implements CommandExec { + + @Override + @Command(mainCommand = "leaderboard", + description = "Check your ping!", + aliases = {"leaderboards", "levels"}, + channelType = ChannelType.TEXT) + public void execute(GuildMessageReceivedEvent event) { + RixaGuild rixaGuild = RixaGuild.getGuild(event.getGuild()); + if (!rixaGuild.getLevelsModule().isEnabled()) { + new MessageBuilder("Levels are not enabled on this server!").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + Message message = event.getChannel().sendMessage + (rixaGuild.getLevelsModule().leaderboard + (event.getMember(), 0).getBuilder().build()).complete(); + message.addReaction("\u2B05").complete(); + message.addReaction("\u27A1").complete(); + } +} diff --git a/src/main/java/me/savvy/rixa/commands/general/LevelsCommand.java b/src/main/java/me/savvy/rixa/commands/general/LevelsCommand.java index 7192c0d..9a67e67 100644 --- a/src/main/java/me/savvy/rixa/commands/general/LevelsCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/LevelsCommand.java @@ -1,7 +1,9 @@ package me.savvy.rixa.commands.general; +import me.savvy.rixa.Rixa; 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.user.UserData; import me.savvy.rixa.utils.MessageBuilder; @@ -10,6 +12,8 @@ import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; import java.io.IOException; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.*; /** @@ -23,21 +27,33 @@ public class LevelsCommand implements CommandExec { channelType = ChannelType.TEXT) public void execute(GuildMessageReceivedEvent event) { RixaGuild rixaGuild = RixaGuild.getGuild(event.getGuild()); - if(!rixaGuild.getLevelsModule().isEnabled()) { + if (!rixaGuild.getLevelsModule().isEnabled()) { new MessageBuilder("Levels are not enabled on this server!").setColor(event.getMember().getColor()).queue(event.getChannel()); return; } UserData data = rixaGuild.getLevelsModule().getUserData(event.getAuthor().getId()); -// Map newMap = new HashMap<>(); -// rixaGuild.getLevelsModule().getUserData().forEach((s, userData) -> { -// newMap.put(userData, userData.getExperience()); -// }); -// sortHashMapByValues(newMap); + String query = "SELECT * FROM `levels` WHERE `guild_id` = '" + event.getGuild().getId() + "' ORDER BY `experience` DESC"; + ResultSet rs = Rixa.getDbManager().executeQuery(query); + int rowNumber = 0; + String rank = "Not found."; + try { + rs.beforeFirst(); + while (rs.next()) { + rowNumber++; + if (rs.getString("user_id").equalsIgnoreCase(event.getAuthor().getId())) { + rank = String.valueOf(rowNumber); + break; + } + } + rs.close(); + } catch(SQLException ignored) { + ignored.printStackTrace(); + } new MessageBuilder() .setAuthor(event.getAuthor().getName(), event.getAuthor().getEffectiveAvatarUrl(), event.getAuthor().getEffectiveAvatarUrl()) .setTitle(event.getAuthor().getName() + "'s level") .setColor(event.getMember().getColor()) - .addField("Rank", "0", true) + .addField("Rank", rank, true) .addField("Level", String.valueOf(data.getLevel()), true) .addField("Exp Needed", data.getRemainingExperience() + "/" + data.getNeededXP @@ -45,32 +61,4 @@ public class LevelsCommand implements CommandExec { .addField("Total Exp", String.valueOf(data.getExperience()), false) .queue(event.getChannel()); } - - public LinkedHashMap sortHashMapByValues( - Map passedMap) { - List mapKeys = new ArrayList<>(passedMap.keySet()); - List mapValues = new ArrayList<>(passedMap.values()); - Collections.sort(mapValues); - //Collections.sort(mapKeys); - - - LinkedHashMap sortedMap = - new LinkedHashMap<>(); - - for (Integer val : mapValues) { - Iterator keyIt = mapKeys.iterator(); - - while (keyIt.hasNext()) { - UserData key = keyIt.next(); - Integer comp1 = passedMap.get(key); - - if (comp1.equals(val)) { - keyIt.remove(); - sortedMap.put(key, val); - break; - } - } - } - return sortedMap; - } } diff --git a/src/main/java/me/savvy/rixa/commands/general/PingCommand.java b/src/main/java/me/savvy/rixa/commands/general/PingCommand.java index 5f19692..7762ed8 100644 --- a/src/main/java/me/savvy/rixa/commands/general/PingCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/PingCommand.java @@ -12,6 +12,7 @@ import java.time.temporal.ChronoUnit; * Created by Timber on 5/23/2017. */ public class PingCommand implements CommandExec { + @Override @Command(mainCommand = "ping", description = "Check your ping!", diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java index f1165c4..2282ecc 100644 --- a/src/main/java/me/savvy/rixa/guild/RixaGuild.java +++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java @@ -92,6 +92,8 @@ public class RixaGuild { ("SELECT `" + permission.toString().toUpperCase() + "` FROM `permissions` WHERE `role_id` = ?"); ps.setString(1, role.getId()); ResultSet rs = db.getObject(ps); + ps.close(); + rs.close(); return rs.getBoolean(permission.toString().toUpperCase()); } catch (SQLException e) { e.printStackTrace(); diff --git a/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java b/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java index 3d219ba..2442ba7 100644 --- a/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java +++ b/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java @@ -8,12 +8,13 @@ import me.savvy.rixa.enums.Result; import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.user.UserData; import me.savvy.rixa.modules.RixaModule; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.Member; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * Created by Timber on 5/23/2017. @@ -30,6 +31,32 @@ public class LevelsModule implements RixaModule { load(); } + public MessageBuilder leaderboard(Member member, int page) { + int sizePerPage = 4; + int maxPages = userData.size() / sizePerPage + (userData.size() % sizePerPage > 0 ? 1 : 0); + if(page < 0) { + page = 0; + } + if(page > maxPages - 2) { + page = maxPages - 3; + } + int from = Math.max(0, page * sizePerPage); + int to = Math.min(userData.size(), (page + 2) * sizePerPage); + List userList = new ArrayList<>(userData.values()).subList(from, to); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < userList.size(); i++) { + UserData user = userData.get(i); + stringBuilder.append(i) + .append(1).append(" ").append(user.getUser().getName()) + .append("#").append(user.getUser().getDiscriminator()) + .append(" (Lvl. ").append(user.getLevel()).append(")") + .append("\n"); + } + MessageBuilder builder = new MessageBuilder(stringBuilder.toString()); + builder.footer("Page: (" + page + " / " + (maxPages - 2) + ")", member.getGuild().getIconUrl()); + return builder.setColor(member.getColor()).setTitle(String.format("Leaderboard: %s", member.getGuild().getName())); + } + @Override public String getName() { return "Levels"; @@ -101,6 +128,6 @@ public class LevelsModule implements RixaModule { public void setEnabled(boolean enabled) { this.enabled = enabled; - Rixa.getData().update("modules", "enabled", "guild_id", enabled, rixaGuild.getGuild().getId()); + Rixa.getData().update("modules", "levels", "guild_id", enabled, rixaGuild.getGuild().getId()); } }