package pl.touk.chat.bot.janusz.commands.cmdfucommand; import com.google.common.base.Joiner; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.JsonNode; import com.mashape.unirest.http.Unirest; import com.mashape.unirest.http.exceptions.UnirestException; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.touk.chat.bot.janusz.commands.JanuszCommand; import java.util.Base64; import java.util.List; public class CMDFuCommand implements JanuszCommand { public static final String CMDFU_API_PATH = "http://www.commandlinefu.com/commands"; public static final String HELP_MESSAGE = "Zagnij devopsa komendą"; public static final String ERROR_MESSAGE = "Przepraszam, zachowałem się jak gówniarz"; Logger log = LoggerFactory.getLogger(CMDFuCommand.class); @Override public String invoke(String sender, List<String> words) { String question = buildCommand(words); if (isCommandEmpty(question)) { return HELP_MESSAGE; } try { return askCMDFu(question); } catch (Exception e) { log.error(e.getMessage()); } return ERROR_MESSAGE; } private boolean isCommandEmpty(String question) { return question == null || "".equals(question); } private String buildCommand(List<String> params) { return Joiner.on(",").join(params); } private String askCMDFu(String question) throws UnirestException { try { return retriveFromCMDFu(question); } catch (UnirestException e) { log.error("Przepraszam, zachowałem się jak gówniarz {}", e.getMessage()); e.printStackTrace(); throw e; } } private String retriveFromCMDFu(String question) throws UnirestException { HttpResponse<JsonNode> cmdfuResponse = Unirest.get(CMDFU_API_PATH + "//matching/{search}/{b64_search}/bys=/sort-by-votes/json") .routeParam("search", question) .routeParam("b64_search", new String(Base64.getEncoder().encode(question.getBytes()))) .asJson(); System.out.println("cmdfuResponse = " + cmdfuResponse); log.info("Command for {}", question); log.info("CMDFu response: {}", cmdfuResponse.getBody().toString()); String response = ""; for (int i = 0; i < 3; i++) { response += cmdfuResponse.getBody().getArray().getJSONObject(i).get("command").toString()+"\n"; } log.info("Got commands {}", response); return response; } }