diff options
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java | 112 |
1 files changed, 60 insertions, 52 deletions
diff --git a/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java index a98a452..2925bd4 100644 --- a/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java +++ b/src/main/java/net/uomc/mineshaft/resources/commands/GiveResourcesCommand.java @@ -2,6 +2,8 @@ package net.uomc.mineshaft.resources.commands; import static java.lang.Math.abs; +import java.util.List; +import java.util.Arrays; import java.util.Optional; import com.mouldycheerio.dbot.CustomBot; @@ -9,7 +11,6 @@ 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; @@ -20,66 +21,73 @@ public class GiveResourcesCommand extends ResourceCommand { public GiveResourcesCommand(ResourceManager resourceManager) { super(resourceManager); - setCommandDetails(CommandDetails.from("give,trade", "Give a user an item", "give [@user] [quantity] [item]")); + setCommandDetails(CommandDetails.from("give", "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 { + if (args.length < 3) { op.sendErrorMessage(e, ":x: Invalid usage!" + usage); + return; + } + List<String> argList = Arrays.asList(args); + + Optional<String> memberMention = argList.stream().filter(s -> s.startsWith("<@")).findFirst(); + + if (memberMention.isEmpty()) { + op.sendErrorMessage(e, ":x: Invalid usage!" + usage); + return; + } + + Optional<Long> quantity = argList.stream().filter(s -> PeelingUtils.isLong(s)).map(s -> Long.parseLong(s)) + .findFirst(); + if (quantity.isEmpty()) { + op.sendErrorMessage(e, ":x: Invalid usage!" + usage); + return; + } + Optional<String> resourceName = argList.stream().filter(s -> !s.startsWith("<@") && !PeelingUtils.isLong(s)) + .findFirst(); + if (resourceName.isEmpty()) { + op.sendErrorMessage(e, ":x: Invalid usage!" + usage); + return; + } + + boolean generate = argList.stream().filter(s -> "generate".equals(s)).findFirst().isPresent(); + if (!e.getMember().getId().equals(op.getOwnerID())){ + generate = false; } + + Optional<Member> mentionToUser = PeelingUtils.mentionToMember(memberMention.get(), e.getGuild()); + + if (!mentionToUser.isPresent()) { + op.sendErrorMessage(e, ":x: That user was not found!" + usage); + return; + } + + Member member = mentionToUser.get(); + long q = abs(quantity.get()); + + Resource resource = getResourceManager().getResource(resourceName.get()); + if (resource == null) { + op.sendErrorMessage(e, ":x: Please provide a valid resource!" + usage); + return; + } + + if (!generate && q > resource.get(e.getMember())) { + op.sendErrorMessage(e, ":x: You do not have enough " + resource.getName() + "!"); + return; + } + + if (!generate) { + resource.increment(e.getMember(), -q); + } + + resource.increment(member, q); + op.sendSuccessMessage(e, + ":white_check_mark: You gave " + member.getAsMention() + " " + resource.prettyValue(q)); } } |
