Add /ld uploadlogs
This commit is contained in:
		| @@ -32,6 +32,7 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|         getCommands().add(new LDMods()); |         getCommands().add(new LDMods()); | ||||||
|         getCommands().add(new LDMetaInfo()); |         getCommands().add(new LDMetaInfo()); | ||||||
|         getCommands().add(new LDDebugPlayer()); |         getCommands().add(new LDDebugPlayer()); | ||||||
|  |         getCommands().add(new LDUploadLogs()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { |     protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { | ||||||
|   | |||||||
| @@ -0,0 +1,234 @@ | |||||||
|  | package me.libraryaddict.disguise.commands.libsdisguises; | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  | import me.libraryaddict.disguise.LibsDisguises; | ||||||
|  | import me.libraryaddict.disguise.utilities.reflection.NmsVersion; | ||||||
|  | import me.libraryaddict.disguise.utilities.translations.LibsMsg; | ||||||
|  | import net.md_5.bungee.api.chat.ClickEvent; | ||||||
|  | import net.md_5.bungee.api.chat.ComponentBuilder; | ||||||
|  | import org.bukkit.ChatColor; | ||||||
|  | import org.bukkit.command.CommandSender; | ||||||
|  | import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils; | ||||||
|  | import org.bukkit.entity.Player; | ||||||
|  | import org.bukkit.scheduler.BukkitRunnable; | ||||||
|  |  | ||||||
|  | import javax.net.ssl.HttpsURLConnection; | ||||||
|  | import java.io.*; | ||||||
|  | import java.net.URL; | ||||||
|  | import java.net.URLEncoder; | ||||||
|  | import java.util.AbstractMap.SimpleEntry; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.LinkedList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Created by libraryaddict on 18/06/2020. | ||||||
|  |  */ | ||||||
|  | public class LDUploadLogs implements LDCommand { | ||||||
|  |     /** | ||||||
|  |      * Small modification of https://gist.github.com/jamezrin/12de49643d7be7150da362e86407113f | ||||||
|  |      */ | ||||||
|  |     @Data | ||||||
|  |     public class GuestPaste { | ||||||
|  |         private String name = null; | ||||||
|  |         private final String text; | ||||||
|  |  | ||||||
|  |         public GuestPaste(String name, String text) { | ||||||
|  |             this.name = name; | ||||||
|  |             this.text = text; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public URL paste() throws Exception { | ||||||
|  |             URL url = new URL("https://pastebin.com/api/api_post.php"); | ||||||
|  |             HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); | ||||||
|  |  | ||||||
|  |             con.setRequestMethod("POST"); | ||||||
|  |             con.setRequestProperty("User-Agent", "Mozilla/5.0"); | ||||||
|  |  | ||||||
|  |             List<SimpleEntry<String, String>> params = new LinkedList<>(); | ||||||
|  |             // This doesn't give you access to my pastebin account ;) | ||||||
|  |             // You need to enter another key for that, this key is for pastebin's tracking metrics. | ||||||
|  |             // If you're using this code, please use your own pastebin dev key. | ||||||
|  |             // Overuse will get it banned, and you'll have to ship a new version with your own key anyways. | ||||||
|  |             // This is seperated into strings to prevent super easy scraping. | ||||||
|  |             if (getClass().getName().contains("me.libraryaddict")) { | ||||||
|  |                 params.add(new SimpleEntry<>("api_dev_key", "62067f9d" + "cc1979a475105b529" + "eb453a5")); | ||||||
|  |             } | ||||||
|  |             params.add(new SimpleEntry<>("api_option", "paste")); | ||||||
|  |             params.add(new SimpleEntry<>("api_paste_name", name)); | ||||||
|  |             params.add(new SimpleEntry<>("api_paste_code", text)); | ||||||
|  |  | ||||||
|  |             params.add(new SimpleEntry<>("api_paste_format", "text")); | ||||||
|  |             params.add(new SimpleEntry<>("api_paste_expire_date", "1M")); | ||||||
|  |             params.add(new SimpleEntry<>("api_paste_private", "1")); | ||||||
|  |  | ||||||
|  |             StringBuilder output = new StringBuilder(); | ||||||
|  |             for (SimpleEntry<String, String> entry : params) { | ||||||
|  |                 if (output.length() > 0) | ||||||
|  |                     output.append('&'); | ||||||
|  |  | ||||||
|  |                 output.append(URLEncoder.encode(entry.getKey(), "UTF-8")); | ||||||
|  |                 output.append('='); | ||||||
|  |                 output.append(URLEncoder.encode(entry.getValue(), "UTF-8")); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             con.setDoOutput(true); | ||||||
|  |             try (DataOutputStream dos = new DataOutputStream(con.getOutputStream())) { | ||||||
|  |                 dos.writeBytes(output.toString()); | ||||||
|  |                 dos.flush(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             int status = con.getResponseCode(); | ||||||
|  |  | ||||||
|  |             if (status >= 200 && status < 300) { | ||||||
|  |                 try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()))) { | ||||||
|  |                     String inputLine; | ||||||
|  |                     StringBuilder response = new StringBuilder(); | ||||||
|  |  | ||||||
|  |                     while ((inputLine = br.readLine()) != null) { | ||||||
|  |                         response.append(inputLine); | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     return new URL(response.toString()); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 throw new IllegalStateException("Unexpected response code " + status); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<String> getTabComplete() { | ||||||
|  |         return Collections.singletonList("uploadlogs"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean hasPermission(CommandSender sender) { | ||||||
|  |         return sender.isOp(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getPermission() { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onCommand(CommandSender sender, String[] args) { | ||||||
|  |         File latest = new File("logs/latest.log"); | ||||||
|  |         File disguises = new File(LibsDisguises.getInstance().getDataFolder(), "disguises.yml"); | ||||||
|  |         File config = new File(LibsDisguises.getInstance().getDataFolder(), "config.yml"); | ||||||
|  |  | ||||||
|  |         if (isTooBig(latest)) { | ||||||
|  |             sender.sendMessage(ChatColor.RED + | ||||||
|  |                     "Your latest.log file is too big! It should be less than 512kb! Please restart and run this " + | ||||||
|  |                     "command again!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (isTooBig(disguises)) { | ||||||
|  |             sender.sendMessage(ChatColor.RED + | ||||||
|  |                     "Your disguises.yml is too big! You'll need to trim that file down before using this command! It " + | ||||||
|  |                     "should be less than 512kb!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (isTooBig(config)) { | ||||||
|  |             sender.sendMessage(ChatColor.RED + "Your config.yml is too big! It should be less than 512kb!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             String latestText = FileUtils.readFileToString(latest, "UTF-8"); | ||||||
|  |  | ||||||
|  |             boolean valid = false; | ||||||
|  |             int lastFind = 0; | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < 15; i++) { | ||||||
|  |                 int nextLine = latestText.indexOf("\n", lastFind); | ||||||
|  |  | ||||||
|  |                 if (nextLine == -1) { | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 String str = latestText.substring(lastFind, nextLine); | ||||||
|  |  | ||||||
|  |                 lastFind = nextLine + 2; | ||||||
|  |  | ||||||
|  |                 if (!str.contains("Starting minecraft server version") && !str.contains("Loading properties") && | ||||||
|  |                         !str.contains("This server is running")) { | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 valid = true; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (!valid) { | ||||||
|  |                 sender.sendMessage( | ||||||
|  |                         ChatColor.RED + "Your latest.log is too old! Please restart the server and try again!"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             sender.sendMessage(ChatColor.GOLD + "Now creating pastebin links..."); | ||||||
|  |  | ||||||
|  |             new BukkitRunnable() { | ||||||
|  |                 @Override | ||||||
|  |                 public void run() { | ||||||
|  |                     try { | ||||||
|  |                         String disguiseText = FileUtils.readFileToString(disguises, "UTF-8"); | ||||||
|  |                         String configText = FileUtils.readFileToString(config, "UTF-8"); | ||||||
|  |  | ||||||
|  |                         URL latestPaste = new GuestPaste("latest.log", latestText).paste(); | ||||||
|  |                         URL configPaste = new GuestPaste("LibsDisguises config.yml", configText).paste(); | ||||||
|  |                         URL disguisesPaste = new GuestPaste("LibsDisguises disguises.yml", disguiseText).paste(); | ||||||
|  |  | ||||||
|  |                         new BukkitRunnable() { | ||||||
|  |                             @Override | ||||||
|  |                             public void run() { | ||||||
|  |                                 sender.sendMessage(ChatColor.GOLD + "Upload successful!"); | ||||||
|  |  | ||||||
|  |                                 if (NmsVersion.v1_13.isSupported()) { | ||||||
|  |                                     // Console can't click :( | ||||||
|  |                                     if (sender instanceof Player) { | ||||||
|  |                                         sender.sendMessage(ChatColor.GOLD + | ||||||
|  |                                                 "Click on the below message to have it appear in your chat input"); | ||||||
|  |                                     } | ||||||
|  |  | ||||||
|  |                                     String text = "My log file: " + latestPaste + ", my config file: " + configPaste + | ||||||
|  |                                             " and my disguises file: " + disguisesPaste; | ||||||
|  |  | ||||||
|  |                                     ComponentBuilder builder = new ComponentBuilder(""); | ||||||
|  |                                     builder.appendLegacy(ChatColor.AQUA + ""); | ||||||
|  |                                     builder.append(text); | ||||||
|  |                                     builder.event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, text)); | ||||||
|  |  | ||||||
|  |                                     sender.spigot().sendMessage(builder.create()); | ||||||
|  |                                 } else { | ||||||
|  |                                     sender.sendMessage( | ||||||
|  |                                             ChatColor.GOLD + "Log: " + latestPaste + "\nConfig: " + configPaste + | ||||||
|  |                                                     "\nDisguises: " + disguisesPaste); | ||||||
|  |                                 } | ||||||
|  |                             } | ||||||
|  |                         }.runTask(LibsDisguises.getInstance()); | ||||||
|  |                     } | ||||||
|  |                     catch (Exception e) { | ||||||
|  |                         e.printStackTrace(); | ||||||
|  |                         sender.sendMessage(ChatColor.RED + "Unexpected error! Upload failed! " + e.getMessage()); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             }.runTaskAsynchronously(LibsDisguises.getInstance()); | ||||||
|  |         } | ||||||
|  |         catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private boolean isTooBig(File file) { | ||||||
|  |         return file.exists() && file.length() >= 512 * 1024; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public LibsMsg getHelp() { | ||||||
|  |         return LibsMsg.LD_COMMAND_UPLOAD_LOGS; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -37,7 +37,6 @@ import org.bukkit.boss.BossBar; | |||||||
| import org.bukkit.entity.*; | import org.bukkit.entity.*; | ||||||
| import org.bukkit.metadata.FixedMetadataValue; | import org.bukkit.metadata.FixedMetadataValue; | ||||||
| import org.bukkit.scheduler.BukkitRunnable; | import org.bukkit.scheduler.BukkitRunnable; | ||||||
| import org.bukkit.scheduler.BukkitTask; |  | ||||||
| import org.bukkit.util.Vector; | import org.bukkit.util.Vector; | ||||||
|  |  | ||||||
| import java.lang.reflect.InvocationTargetException; | import java.lang.reflect.InvocationTargetException; | ||||||
|   | |||||||
| @@ -1,16 +1,10 @@ | |||||||
| package me.libraryaddict.disguise.utilities.listeners; | package me.libraryaddict.disguise.utilities.listeners; | ||||||
|  |  | ||||||
| import me.libraryaddict.disguise.LibsDisguises; |  | ||||||
| import me.libraryaddict.disguise.utilities.modded.ModdedEntity; |  | ||||||
| import me.libraryaddict.disguise.utilities.modded.ModdedManager; | import me.libraryaddict.disguise.utilities.modded.ModdedManager; | ||||||
| import org.bukkit.entity.Player; |  | ||||||
| import org.bukkit.event.EventHandler; | import org.bukkit.event.EventHandler; | ||||||
| import org.bukkit.event.EventPriority; | import org.bukkit.event.EventPriority; | ||||||
| import org.bukkit.event.Listener; | import org.bukkit.event.Listener; | ||||||
| import org.bukkit.event.player.PlayerLoginEvent; | import org.bukkit.event.player.PlayerLoginEvent; | ||||||
| import org.bukkit.metadata.FixedMetadataValue; |  | ||||||
|  |  | ||||||
| import java.util.ArrayList; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Created by libraryaddict on 11/06/2020. |  * Created by libraryaddict on 11/06/2020. | ||||||
|   | |||||||
| @@ -339,6 +339,9 @@ public enum LibsMsg { | |||||||
|             "Reload's the plugin config and possibly blows disguises"), |             "Reload's the plugin config and possibly blows disguises"), | ||||||
|     LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA + |     LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA + | ||||||
|             "Used to help debug scoreboard issues on a player disguise"), |             "Used to help debug scoreboard issues on a player disguise"), | ||||||
|  |     LD_COMMAND_UPLOAD_LOGS(ChatColor.BLUE + "/libsdisguises uploadlogs - " + ChatColor.AQUA + | ||||||
|  |             "Uploads latest.log, disguises.yml and config.yml and gives you the link to share. Used when seeking " + | ||||||
|  |             "assistance."), | ||||||
|     SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall.."); |     SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall.."); | ||||||
|  |  | ||||||
|     private final String string; |     private final String string; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user