package commands.etc; import com.google.gson.JsonParser; import commands.Command; import core.Perms; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import sun.net.www.http.HttpClient; import utils.MSGS; import utils.STATICS; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; /** * Created by zekro on 10.06.2017 / 00:39 * DiscordBot/commands.etc * © zekro 2017 */ public class Log implements Command { /** * Method by StupPlayer (https://github.com/StupPlayer) * @param data * @return */ public static String hastePost(String data) { CloseableHttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost("https://hastebin.com/documents"); try { post.setEntity(new StringEntity(data)); HttpResponse response = client.execute(post); String result = EntityUtils.toString(response.getEntity()); return "https://hastebin.com/" + new JsonParser().parse(result).getAsJsonObject().get("key").getAsString(); } catch (IOException e) { e.printStackTrace(); } return "Could not post!"; } @Override public boolean called(String[] args, MessageReceivedEvent event) { return false; } @Override public void action(String[] args, MessageReceivedEvent event) throws ParseException, IOException { File f = new File("screenlog.0"); if ((args.length > 0 ? args[0] : "").equalsIgnoreCase("clear")) { if (!Perms.isOwner(event.getAuthor(), event.getTextChannel())) return; if (f.exists()) { if (f.delete()) { f.createNewFile(); event.getTextChannel().sendMessage(MSGS.success().setDescription("Successfully cleared log file.").build()).queue(); } else { event.getTextChannel().sendMessage(MSGS.error().setDescription("Failed while attempting to clear log file.").build()).queue(); } } return; } if (f.exists()) { BufferedReader br = new BufferedReader(new FileReader(f)); List<String> logLines = new ArrayList<>(); List<String> outLogLines; StringBuilder sb = new StringBuilder(); //StringBuilder sbFull = new StringBuilder(); //String shorted = "Unshorted log."; //Message msg = event.getTextChannel().sendMessage(new EmbedBuilder().setDescription("Uploading log to hastebin.com ...").build()).complete(); br.lines().forEach(l -> logLines.add(l)); //logLines.forEach(l -> sbFull.append(l + "\n")); outLogLines = logLines; if (logLines.size() > 20) { //shorted = "Log shorted because it is longer than 20 lines.\n" + // "See full log here: " + hastePost(sbFull.toString()); outLogLines = outLogLines.subList(outLogLines.size() - 20, outLogLines.size()); } outLogLines.forEach(s -> sb.append(s + "\n")); //msg.delete().queue(); event.getTextChannel().sendMessage( "__**zekroBot `screenlog.0` log**__\n\n" + //"*" + shorted + "*\n\n" + "```" + sb.toString() + "```" ).queue(); } else { event.getTextChannel().sendMessage(MSGS.error().setDescription("There is no file `'screenlog.0'` available to get log from.").build()).queue(); } } @Override public void executed(boolean success, MessageReceivedEvent event) { } @Override public String help() { return null; } @Override public String description() { return "Show bots log file"; } @Override public String commandType() { return STATICS.CMDTYPE.etc; } @Override public int permission() { return 0; } }