1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
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;
import com.mouldycheerio.dbot.commands.CommandDetails;
import com.mouldycheerio.dbot.util.PeelingUtils;
import net.dv8tion.jda.api.entities.Member;
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", "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 < 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));
}
}
|