diff options
| author | davidovski <david@davidovski.xyz> | 2025-10-17 18:47:36 +0100 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-10-17 18:47:36 +0100 |
| commit | da9ece80133a33aff456d30854adc095b8f303ab (patch) | |
| tree | b14c5ba37cebb6a4c70d824e686f01640b4bf52c /src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java | |
| parent | dc825ad776f9fe9f763267874f6fa70c4870fc46 (diff) | |
v0.5.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java b/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java new file mode 100644 index 0000000..91c9ef6 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/MineshaftLeaderBoardCommand.java @@ -0,0 +1,102 @@ +package net.uomc.mineshaft; + +import static java.util.stream.Collectors.toMap; + +import java.util.List; +import java.util.Map.Entry; +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.commands.DetailedCommand; +import com.mouldycheerio.dbot.util.PeelingUtils; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.uomc.mineshaft.resources.Resource; + +public class MineshaftLeaderBoardCommand extends DetailedCommand { + + private Mineshaft bot; + + public MineshaftLeaderBoardCommand(Mineshaft bot) { + setCommandDetails( + CommandDetails.from("leaderboard,lb,top,best", "Lists the most valuable users", "top [@user] [item]")); + this.bot = bot; + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + if (args.length > 0) { + Resource resource = bot.getResourceManager().getResource(args[0]); + if (resource == null) { + if (args[0].equalsIgnoreCase("pickaxes") || args[0].equalsIgnoreCase("pickaxe")) { + bot.sendMessage(e, "Leaderboard", makeMessage( + bot.getPickaxes().getMembers(e.getGuild()), "pickaxe level", + entry -> { + String ench = ""; + long level = bot.getPickaxes().getLevel(entry.getKey(), e.getGuild().getId()); + long fortune = bot.getPickaxes().getFortune(entry.getKey(), e.getGuild().getId()); + long efficiency = bot.getPickaxes().getEfficiency(entry.getKey(), e.getGuild().getId()); + + if (fortune > 0 || efficiency > 0) { + ench = String.format("(Eff%s,Fort%s)", efficiency, fortune); + } + return Pickaxes.pickaxeLevelToName(level) + ench ; + }, + user -> bot.getPickaxes().getLevel(user, e.getGuild().getId()) + bot.getPickaxes().getEfficiency(user, e.getGuild().getId()) + bot.getPickaxes().getFortune(user, e.getGuild().getId()))); + return; + } + if (args[0].equalsIgnoreCase("farm") || args[0].equalsIgnoreCase("farmlevel")) { + bot.sendMessage(e, "Leaderboard", makeMessage( + bot.getPickaxes().getMembers(e.getGuild()), "farm level", + entry -> PeelingUtils.amountToString(entry.getValue()), + user -> bot.getPickaxes().getFarmLevel(user, e.getGuild().getId()) + )); + return; + } + + op.sendErrorMessage(e, ":x: Please provide a valid resource!"); + return; + } + + bot.sendMessage(e, "Leaderboard", makeMessage( + resource.getMembers(e.getGuild()), resource.getSymbol(), + entry -> resource.prettyValue(entry.getValue()), + user -> resource.getValue(user, e.getGuild().getId()))); + return; + } + bot.sendMessage(e, "Leaderboard", makeMessage( + bot.getResourceManager().getPrimaryResource().getMembers(e.getGuild()), "inventory value", + entry -> PeelingUtils.amountToString(entry.getValue()), + user -> bot.getResourceManager() + .getResources() + .stream() + .map(r -> r.getValue(user, e.getGuild().getId()) * r.getValue()) + .reduce((long) 0, (a, b) -> a + b))); + } + + public String makeMessage(List<String> members, String rankedBy, + Function<Entry<String, Long>, String> getValueString, Function<String, Long> getValueLong) { + + AtomicInteger n = new AtomicInteger(0); + + return "*ranked by " + rankedBy + "*\n\n" + String.join( + "\n", members.stream().collect( + toMap( + Function.identity(), + getValueLong)) + .entrySet().stream() + .sorted( + (o1, o2) -> Long.compare(o2.getValue(), o1.getValue())) + .limit(10) + .map( + entry -> String.format( + "%d <@%s> **%s**", + n.incrementAndGet(), + entry.getKey(), + getValueString.apply(entry))) + .collect(Collectors.toList())); + } +} |
