summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java
new file mode 100644
index 0000000..a001577
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/resources/commands/LeaderBoardCommand.java
@@ -0,0 +1,50 @@
+package net.uomc.mineshaft.resources.commands;
+
+import static java.util.stream.Collectors.toMap;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.mouldycheerio.dbot.CustomBot;
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.resources.ResourceManager;
+
+public class LeaderBoardCommand extends ResourceCommand {
+
+ public LeaderBoardCommand(ResourceManager resourceManager) {
+ super(resourceManager);
+ setCommandDetails(
+ CommandDetails.from("leaderboard,lb,top,best", "Lists the most valuable users", "top [@user]"));
+
+ }
+
+ @Override
+ public void execute(MessageReceivedEvent e, CustomBot op, String[] args) {
+ AtomicInteger n = new AtomicInteger(0);
+ op.sendMessage(
+ e, "Most Valuable Players", "*ranked by inventory value*\n\n" + String.join(
+ "\n", getResourceManager().getPrimaryResource().getMembers(e.getGuild()).stream().collect(
+ toMap(
+ Function.identity(),
+ user -> getResourceManager()
+ .getResources()
+ .stream()
+ .map(r -> r.getValue(user, e.getGuild().getId()) * r.getValue())
+ .reduce((long) 0, (a, b) -> a + b)))
+ .entrySet().stream()
+ .sorted(
+ (o1, o2) -> Long.compare(o2.getValue(), o1.getValue()))
+ .limit(10)
+ .map(
+ entry -> String.format(
+ "%d <@%s> (**%s**)",
+ n.incrementAndGet(),
+ entry.getKey(),
+ PeelingUtils.amountToString(entry.getValue())))
+ .collect(Collectors.toList())));
+ }
+}