diff options
| author | davidovski <david@davidovski.xyz> | 2025-10-11 04:55:51 +0100 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-10-11 04:55:51 +0100 |
| commit | 10b327e9f6441a8863227ce3e075a5a587654065 (patch) | |
| tree | 5e94ecc91290febacf5181d3596563a7a24bd010 /src/main/java/net/uomc/mineshaft/resources/commands | |
v0.3.1
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/commands')
9 files changed, 418 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java new file mode 100644 index 0000000..a9f0dc6 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/CreateResourceCommand.java @@ -0,0 +1,44 @@ +package net.uomc.mineshaft.resources.commands; + +import java.util.ArrayList; +import java.util.List; + +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.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class CreateResourceCommand extends ResourceCommand { + private List<String> questions; + + public CreateResourceCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.hidden("createItem")); + + questions = new ArrayList<String>(); + questions.add("What is the name of this item?"); + questions.add("What is the symbol for this item?"); + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + String ownerid = op.getConfig().getString("ownerid"); + if (ownerid.equals(e.getAuthor().getId())) { + PeelingUtils.askQuestions(e, questions, (responses) -> { + String name = responses.get(0); + String symbol = responses.get(1); + + Resource resource = new Resource(name, symbol, 1, getResourceManager()); + getResourceManager().addResource(resource); + + op.sendMessage(e, "Items", ":white_check_mark: added **" + name + "** to the list of items"); + }); + } else { + op.sendErrorMessage(e, ":x: this command is not intended for you"); + } + } + +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java new file mode 100644 index 0000000..a98a452 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java @@ -0,0 +1,85 @@ +package net.uomc.mineshaft.resources.commands; + +import static java.lang.Math.abs; + +import java.util.Optional; + +import com.mouldycheerio.dbot.CustomBot; +import com.mouldycheerio.dbot.commands.CommandDetails; +import com.mouldycheerio.dbot.util.PeelingUtils; + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.uomc.mineshaft.resources.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class GiveResourcesCommand extends ResourceCommand { + + private String usage; + + public GiveResourcesCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.from("give,trade", "Give a user an item", "give [@user] [quantity] [item]")); + usage = "\n`" + getCommandDetails().getUsage() + "`"; + + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + if (args.length > 1) { + String usermention = args[0]; + String quantitystring = args[1]; + String resourcename = getResourceManager().getPrimaryResourceName(); + if (args.length > 2) { + resourcename = args[2]; + } + + boolean generate = false; + String ownerid = op.getConfig().getString("ownerid"); + if (ownerid.equals(e.getAuthor().getId())) { + if (args.length > 3) { + if (args[3].equals("generate")) { + generate = true; + } + } + } + Optional<Member> mentionToUser = PeelingUtils.mentionToMember(usermention, e.getGuild()); + if (mentionToUser.isPresent()) { + Member member = mentionToUser.get(); + try { + long quantity = Long.parseLong(quantitystring); + quantity = abs(quantity); + + Resource resource = getResourceManager().getResource(resourcename); + if (resource != null) { + + if (!generate && quantity > resource.get(e.getMember())) { + op.sendErrorMessage(e,":x: You do not have enough " + resource.getName() + "!"); + } else { + if (!generate) { + resource.increment(e.getMember(), -quantity); + } + resource.increment(member, quantity); + op.sendSuccessMessage(e, ":white_check_mark: You gave " + member.getAsMention() + " " + resource.prettyValue(quantity)); + } + } else { + op.sendErrorMessage(e, ":x: Please provide a valid resource!" + usage); + + } + + } catch (NumberFormatException ex) { + op.sendErrorMessage(e,":x: Please provide a valid quantity!" + usage); + + } + + } else { + op.sendErrorMessage(e, ":x: That user was not found!" + usage); + } + } else { + op.sendErrorMessage(e, ":x: Invalid usage!" + usage); + + } + } + +} 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()))); + } +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java new file mode 100644 index 0000000..cb6c33a --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/ListResourcesCommand.java @@ -0,0 +1,31 @@ +package net.uomc.mineshaft.resources.commands; + +import java.util.List; + +import com.mouldycheerio.dbot.CustomBot; +import com.mouldycheerio.dbot.commands.CommandDetails; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.uomc.mineshaft.resources.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class ListResourcesCommand extends ResourceCommand { + + public ListResourcesCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.hidden("listItems")); + + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + List<Resource> resources = getResourceManager().listResources(); + StringBuilder stringBuilder = new StringBuilder(); + resources.forEach(r -> { + stringBuilder.append(r.getSymbol() + " " + r.getName() + "\n"); + }); + + op.sendMessage(e, "Available Items", stringBuilder.toString()); + } + +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java new file mode 100644 index 0000000..b172a1e --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/MyResourcesCommand.java @@ -0,0 +1,53 @@ +package net.uomc.mineshaft.resources.commands; + +import java.util.List; + +import com.mouldycheerio.dbot.CustomBot; +import com.mouldycheerio.dbot.commands.CommandDetails; +import com.mouldycheerio.dbot.util.PeelingUtils; + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.uomc.mineshaft.resources.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class MyResourcesCommand extends ResourceCommand { + + public MyResourcesCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.from("items,inventory,inv,i", "Lists your current inventory of items", "inventory [@user]")); + + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + List<Resource> resources = getResourceManager().listResources(); + + Member member = PeelingUtils.getSingleMentionFromArgs(e); + boolean your = member.equals(e.getMember()); + StringBuilder stringBuilder = new StringBuilder(); + resources.stream().sorted((r1, r2) -> (int)(r1.get(member) - r2.get(member))).forEach(r -> { + long l = r.get(member); + if (l != 0) { + String v = r.prettyValue(l); + stringBuilder.append("**" + v + "** " + r.getName()); + stringBuilder.append("\n"); + } + }); + String name = (your ? "Your" : member.getEffectiveName() + "'s"); + if (stringBuilder.length() == 0) + stringBuilder.append(name + "inventory is empty"); + + op.sendMessage(e, name + " Inventory", stringBuilder.toString() + "\n*Total value: " + PeelingUtils.amountToString(calculateInventoryValue(member)) + "*"); + } + + public long calculateInventoryValue(Member member) { + return getResourceManager() + .getResources() + .stream() + .map(r -> r.get(member) * r.getValue()) + .reduce((long) 0, (a, b) -> a + b); + } + +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java new file mode 100644 index 0000000..2fadf27 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/RemoveResourceCommand.java @@ -0,0 +1,46 @@ +package net.uomc.mineshaft.resources.commands; + +import com.mouldycheerio.dbot.CustomBot; +import com.mouldycheerio.dbot.commands.Command; +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 RemoveResourceCommand extends ResourceCommand implements Command { + + public RemoveResourceCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.hidden("removeItem")); + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + String ownerid = op.getConfig().getString("ownerid"); + if (ownerid.equals(e.getAuthor().getId())) { + if (args.length > 0) { + String name = args[0]; + PeelingUtils.askQuestion(e, "Are you sure you want to delete **" + name + "**?\n(warning: all userdata will be lost)\nSend `confirm` to proceed", r -> { + if (r.equalsIgnoreCase("confirm")) { + boolean removeResource = getResourceManager().removeResource(name); + if (removeResource) { + op.sendMessage(e, "removed", "removed the item **" + name + "** from the list of items"); + + } else { + op.sendMessage(e, "not found", ":x: the item **" + name + "** was not found"); + } + } else { + op.sendMessage(e, "cancelled", ":x: operation cancelled"); + + } + }); + } else { + op.sendMessage(e, "incorrect usage", ":x: usage: `.removeResource [name]`"); + } + } else { + op.sendMessage(e, "missing permissions", ":x: this command is not intended for you"); + } + } + +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java new file mode 100644 index 0000000..9d99e0e --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/ResourceCommand.java @@ -0,0 +1,17 @@ +package net.uomc.mineshaft.resources.commands; + +import com.mouldycheerio.dbot.commands.DetailedCommand; + +import net.uomc.mineshaft.resources.ResourceManager; + +public abstract class ResourceCommand extends DetailedCommand { + private ResourceManager resourceManager; + + public ResourceCommand(ResourceManager resourceManager) { + this.resourceManager = resourceManager; + } + + public ResourceManager getResourceManager() { + return resourceManager; + } +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java new file mode 100644 index 0000000..6515d06 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/SetPrimaryResourceCommand.java @@ -0,0 +1,47 @@ +package net.uomc.mineshaft.resources.commands; + +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.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class SetPrimaryResourceCommand extends ResourceCommand { + + public SetPrimaryResourceCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.hidden("setPrimaryItem")); + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot op, String[] args) { + String ownerid = op.getConfig().getString("ownerid"); + if (ownerid.equals(e.getAuthor().getId())) { + if (args.length > 0) { + Resource resource = getResourceManager().getResource(args[0]); + if (resource != null) { + PeelingUtils.askQuestion(e, "This will reset all users balance for this item, type `confirm` to continue", r -> { + if (r.equals("confirm")) { + getResourceManager().setPrimaryResource(resource.getName()); + + e.getGuild().loadMembers().onSuccess(members -> { + members.forEach(m -> getResourceManager().getPrimaryResource().set(m, 0)); + }); + + op.sendMessage(e, "primary item", "Set **" + resource.getName() + "** to the primary item"); + } + }); + } else { + op.sendErrorMessage(e, "This item was not found"); + } + } else { + op.sendMessage(e, "primary resource", "This will be the default item that will be used for trading\nUsage: `.setPrimaryResource [item name]`"); + } + } else { + op.sendErrorMessage(e, ":x: this command is not intended for you"); + } + } + +} diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java new file mode 100644 index 0000000..c094d83 --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/resources/commands/ValuesCommand.java @@ -0,0 +1,45 @@ +package net.uomc.mineshaft.resources.commands; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.mouldycheerio.dbot.CustomBot; +import com.mouldycheerio.dbot.commands.CommandDetails; +import com.mouldycheerio.dbot.commands.CommandFail; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.uomc.mineshaft.resources.Resource; +import net.uomc.mineshaft.resources.ResourceManager; + +public class ValuesCommand extends ResourceCommand { + + public ValuesCommand(ResourceManager resourceManager) { + super(resourceManager); + setCommandDetails(CommandDetails.from("marketValue,values,prices", "Show estimated market values of all the items")); + } + + @Override + public void execute(MessageReceivedEvent e, CustomBot b, String[] args) throws CommandFail { + long total = getResourceManager().getPrimaryResource().total(); + + List<Resource> resources = new ArrayList<Resource>(getResourceManager().getResources()); + Collections.sort(resources, (r1, r2) -> Long.compare(r2.getValue(),r1.getValue())); + + StringBuilder stringBuilder = new StringBuilder(); + resources.forEach((r) -> { + long v = r.getValue(); + stringBuilder.append("**1** " + r.getName() + r.getSymbol() + " : "); + if (v < 0) { + stringBuilder.append("**???**"); + } else { + stringBuilder.append("**" + getResourceManager().getPrimaryResource().prettyValue(v) + "**"); + } + stringBuilder.append("\n"); + }); + + b.sendMessage(e, "Estimated Market Values", stringBuilder.toString()); + } + + +} |
