261 lines
11 KiB
Java
261 lines
11 KiB
Java
package xyz.etztech.minecraftmanager.command;
|
|
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonElement;
|
|
import net.md_5.bungee.api.chat.ClickEvent;
|
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
|
import net.md_5.bungee.api.chat.HoverEvent;
|
|
import net.md_5.bungee.api.chat.TextComponent;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import xyz.etztech.core.web.CoreWeb;
|
|
import xyz.etztech.core.web.ICallback;
|
|
import xyz.etztech.minecraftmanager.*;
|
|
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
|
import xyz.etztech.minecraftmanager.objects.ModelResponse;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
public class CommandApplication implements CommandExecutor {
|
|
|
|
MinecraftManager plugin;
|
|
|
|
public CommandApplication(MinecraftManager plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(CommandSender sender, Command command, String base, String[] args) {
|
|
|
|
if (args.length != 2) {
|
|
sender.sendMessage(ChatColor.RED + "This command takes two arguments.");
|
|
return true;
|
|
}
|
|
String subcommand = args[0].toLowerCase();
|
|
switch (subcommand) {
|
|
case "search":
|
|
search(sender, args[1]);
|
|
break;
|
|
case "info":
|
|
info(sender, args[1]);
|
|
break;
|
|
case "accept":
|
|
action(sender, args[1], true);
|
|
break;
|
|
case "deny":
|
|
action(sender, args[1], false);
|
|
break;
|
|
case "clear":
|
|
clear(sender, args[1]);
|
|
break;
|
|
default:
|
|
sender.sendMessage(ChatColor.RED + "Unknown sub-command. You can search, accept, or deny applications.");
|
|
break;
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
private class SearchCallback implements ICallback {
|
|
private CommandSender commandSender;
|
|
|
|
SearchCallback(CommandSender commandSender) {
|
|
this.commandSender = commandSender;
|
|
}
|
|
|
|
@Override
|
|
public void invoke(String s) {
|
|
ModelResponse modelResponse = new ModelResponse(s);
|
|
JsonArray results = modelResponse.getResults();
|
|
StringBuffer response = new StringBuffer();
|
|
if (results.size() > 0) {
|
|
response.append(ChatColor.GOLD).append("===== Results =====");
|
|
int max = results.size() >= 10 ? 10 : results.size();
|
|
for (int i = 0; i < max; i++) {
|
|
JsonObject result = results.get(i).getAsJsonObject();
|
|
response.append("\n").append(ChatColor.YELLOW).append("#")
|
|
.append(result.get("id")).append(" - ").append(result.get("username").getAsString());
|
|
}
|
|
if (results.size() > 10) {
|
|
response.append("\n").append(ChatColor.YELLOW).append("This search returned more than ten results. " +
|
|
"Try to refine your search if you didn't find what you needed.");
|
|
}
|
|
} else {
|
|
response.append(ChatColor.YELLOW).append("No results found...");
|
|
}
|
|
|
|
commandSender.sendMessage(response.toString());
|
|
}
|
|
}
|
|
|
|
private void search(CommandSender sender, String name) {
|
|
if (sender.hasPermission("minecraftmanager.application.search")) {
|
|
Map<String, String> filter = MCMAPI.setup();
|
|
filter.put("username__icontains", name);
|
|
CoreWeb.asyncGetCallback(plugin, MCMAPI.getModelUrl("application"), filter, new SearchCallback(sender));
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You do not have permission to search applications.");
|
|
}
|
|
}
|
|
|
|
private String getAsStringOrNull(JsonElement json) {
|
|
if (json.isJsonNull()) {
|
|
return "None";
|
|
} else {
|
|
return json.getAsString();
|
|
}
|
|
}
|
|
|
|
private class InfoCallback implements ICallback {
|
|
private CommandSender commandSender;
|
|
|
|
InfoCallback(CommandSender commandSender) {
|
|
this.commandSender = commandSender;
|
|
}
|
|
|
|
@Override
|
|
public void invoke(String s) {
|
|
ModelResponse modelResponse = new ModelResponse(s);
|
|
JsonArray results = modelResponse.getResults();
|
|
StringBuilder response = new StringBuilder();
|
|
TextComponent text = new TextComponent();
|
|
if (results.size() == 1) {
|
|
JsonObject result = results.get(0).getAsJsonObject();
|
|
response.append(ChatColor.GOLD).append("===== " + result.get("username").getAsString() + " =====");
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Application ID: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("id")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Age: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("age")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Player Type: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("player_type")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Ever Banned: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("ever_banned")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Explanation: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("ever_banned_explanation")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Reference: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("reference")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Read Rules: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(getAsStringOrNull(result.get("read_rules")));
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.YELLOW).append(ChatColor.BOLD);
|
|
response.append("Accepted: ");
|
|
response.append(ChatColor.RESET);
|
|
response.append(result.get("accepted").isJsonNull() ? "Unanswered" : result.get("accepted").getAsString());
|
|
response.append("\n").append(ChatColor.RESET).append(ChatColor.GOLD).append(ChatColor.ITALIC);
|
|
response.append("More info can be found on the MCM web app.");
|
|
text.setText(response.toString());
|
|
text.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click for more info").create()));
|
|
text.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, result.get("link").getAsString()));
|
|
} else {
|
|
response.append(ChatColor.RED).append("Could not identify an application.");
|
|
text.setText(response.toString());
|
|
}
|
|
|
|
commandSender.spigot().sendMessage(text);
|
|
}
|
|
}
|
|
|
|
private void info(CommandSender sender, String key) {
|
|
if (sender.hasPermission("minecraftmanager.application.search")) {
|
|
Map<String, String> filter = MCMAPI.setup();
|
|
if (StringUtils.isNumeric(key)) {
|
|
filter.put("id__exact", key);
|
|
} else {
|
|
filter.put("username__iexact", key);
|
|
}
|
|
CoreWeb.asyncGetCallback(plugin, MCMAPI.getModelUrl("application"), filter, new InfoCallback(sender));
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You do not have permission to search applications.");
|
|
}
|
|
}
|
|
|
|
private class ActionCallback implements ICallback {
|
|
private CommandSender commandSender;
|
|
|
|
ActionCallback(CommandSender commandSender) {
|
|
this.commandSender = commandSender;
|
|
}
|
|
|
|
@Override
|
|
public void invoke(String s) {
|
|
MCMResponse response = new MCMResponse(s);
|
|
commandSender.spigot().sendMessage(response.getMCJSON());
|
|
}
|
|
}
|
|
|
|
private void action(CommandSender sender, String id, boolean accepted) {
|
|
if (sender.hasPermission("minecraftmanager.application.action")) {
|
|
String username;
|
|
if (sender instanceof Player) {
|
|
username = sender.getName();
|
|
} else {
|
|
username = "Console";
|
|
}
|
|
if (StringUtils.isNumeric(id)) {
|
|
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/application_action/";
|
|
Map<String, String> data = MCMAPI.setup();
|
|
data.put("application_id", id);
|
|
data.put("action", accepted ? "True" : "False");
|
|
data.put("username", username);
|
|
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new ActionCallback(sender));
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You must use an application ID to ensure accuracy.");
|
|
}
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You do not have permission to take action on an application.");
|
|
}
|
|
}
|
|
|
|
private class ClearCallback implements ICallback {
|
|
private CommandSender commandSender;
|
|
|
|
ClearCallback(CommandSender commandSender) {
|
|
this.commandSender = commandSender;
|
|
}
|
|
|
|
@Override
|
|
public void invoke(String s) {
|
|
MCMResponse response = new MCMResponse(s);
|
|
commandSender.spigot().sendMessage(response.getMCJSON());
|
|
}
|
|
}
|
|
|
|
private void clear(CommandSender sender, String id) {
|
|
if (sender.hasPermission("minecraftmanager.application.action")) {
|
|
if (StringUtils.isNumeric(id)) {
|
|
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/application_clear/";
|
|
Map<String, String> data = MCMAPI.setup();
|
|
data.put("application_id", id);
|
|
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new ClearCallback(sender));
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You must use an application ID to ensure accuracy.");
|
|
}
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + "You do not have permission to take action on an application.");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|