Merge remote-tracking branch 'origin/master'
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -2,11 +2,8 @@
 | 
			
		||||
  <library name="Gradle: mysql:mysql-connector-java:5.1.38">
 | 
			
		||||
    <CLASSES>
 | 
			
		||||
      <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar!/" />
 | 
			
		||||
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/5.1.38/dbbd7cd309ce167ec8367de4e41c63c2c8593cc5/mysql-connector-java-5.1.38.jar!/" />
 | 
			
		||||
    </CLASSES>
 | 
			
		||||
    <JAVADOC />
 | 
			
		||||
    <SOURCES>
 | 
			
		||||
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/5.1.38/b83cac8c938dfb9b7a8e191e2d482be88eb8280c/mysql-connector-java-5.1.38-sources.jar!/" />
 | 
			
		||||
    </SOURCES>
 | 
			
		||||
    <SOURCES />
 | 
			
		||||
  </library>
 | 
			
		||||
</component>
 | 
			
		||||
@@ -2,8 +2,11 @@
 | 
			
		||||
  <library name="Gradle: net.sf.trove4j:trove4j:3.0.3">
 | 
			
		||||
    <CLASSES>
 | 
			
		||||
      <root url="jar://$MAVEN_REPOSITORY$/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar!/" />
 | 
			
		||||
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.sf.trove4j/trove4j/3.0.3/42ccaf4761f0dfdfa805c9e340d99a755907e2dd/trove4j-3.0.3.jar!/" />
 | 
			
		||||
    </CLASSES>
 | 
			
		||||
    <JAVADOC />
 | 
			
		||||
    <SOURCES />
 | 
			
		||||
    <SOURCES>
 | 
			
		||||
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.sf.trove4j/trove4j/3.0.3/109c5be93362e6e651e417c51d1863477a22969c/trove4j-3.0.3-sources.jar!/" />
 | 
			
		||||
    </SOURCES>
 | 
			
		||||
  </library>
 | 
			
		||||
</component>
 | 
			
		||||
							
								
								
									
										2
									
								
								.idea/modules/Rixa_main.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/modules/Rixa_main.iml
									
									
									
										generated
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<module external.linked.project.id="Rixa:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="1.0" type="JAVA_MODULE" version="4">
 | 
			
		||||
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
 | 
			
		||||
    <output url="file://$MODULE_DIR$/../../build/classes/main" />
 | 
			
		||||
    <output url="file://$MODULE_DIR$/../../out/production/classes" />
 | 
			
		||||
    <exclude-output />
 | 
			
		||||
    <content url="file://$MODULE_DIR$/../../src/main">
 | 
			
		||||
      <sourceFolder url="file://$MODULE_DIR$/../../src/main/java" isTestSource="false" />
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.idea/modules/Rixa_test.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/modules/Rixa_test.iml
									
									
									
										generated
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<module external.linked.project.id="Rixa:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="1.0" type="JAVA_MODULE" version="4">
 | 
			
		||||
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
 | 
			
		||||
    <output-test url="file://$MODULE_DIR$/../../build/classes/test" />
 | 
			
		||||
    <output-test url="file://$MODULE_DIR$/../../out/test/classes" />
 | 
			
		||||
    <exclude-output />
 | 
			
		||||
    <content url="file://$MODULE_DIR$/../../src/test">
 | 
			
		||||
      <sourceFolder url="file://$MODULE_DIR$/../../src/test/java" isTestSource="true" />
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1248
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1248
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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<UserData, Integer> 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<UserData, Integer> sortHashMapByValues(
 | 
			
		||||
            Map<UserData, Integer> passedMap) {
 | 
			
		||||
        List<UserData> mapKeys = new ArrayList<>(passedMap.keySet());
 | 
			
		||||
        List<Integer> mapValues = new ArrayList<>(passedMap.values());
 | 
			
		||||
        Collections.sort(mapValues);
 | 
			
		||||
        //Collections.sort(mapKeys);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        LinkedHashMap<UserData, Integer> sortedMap =
 | 
			
		||||
                new LinkedHashMap<>();
 | 
			
		||||
 | 
			
		||||
        for (Integer val : mapValues) {
 | 
			
		||||
            Iterator<UserData> 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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!",
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
 
 | 
			
		||||
@@ -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<UserData> 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());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user