package addon.pepa; import bashoid.Addon; import bashoid.Message; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.util.HashMap; import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import utils.WebPage; import static utils.Constants.*; public class Pepa extends Addon { private HashMap<String, String> formValues = new HashMap<>(); private static final String ENCODING = "windows-1250"; private static final String LAST_RESPONSE_KEY = "arrSent[0]"; private String loadResponse(String query) throws Exception { String postData = generatePostData(query); WebPage entry = WebPage.loadWebPage("http://pepa.vyskup.com/index.php", ENCODING, postData); updateFormValues(entry); return getLastResponse(); } private String generatePostData(String query) throws UnsupportedEncodingException { String postData = "strText=" + URLEncoder.encode(query, ENCODING); for (Map.Entry<String, String> formValue : formValues.entrySet() ) { String key = formValue.getKey(); String value = formValue.getValue(); postData += "&" + key + "=" + URLEncoder.encode(value, ENCODING); } return postData; } private void updateFormValues(WebPage entry) throws ParseException { formValues.clear(); Element form = Jsoup.parse( entry.getContent() ).getElementsByTag("form").first(); Elements inputs = form.getElementsByAttributeValue("type", "hidden"); for (Element input : inputs) formValues.put( input.attr("name"), input.val() ); } private String getLastResponse() throws Exception { if ( !formValues.containsKey(LAST_RESPONSE_KEY) ) throw new Exception("Last response was not found."); return formValues.get(LAST_RESPONSE_KEY); } private String getQuery(String message) { int beginPosition = message.indexOf(' '); return message.substring(beginPosition); } @Override public boolean shouldReact(Message message) { String myNick = addonListener.getBotNickname(); return message.text.startsWith(myNick) && message.text.indexOf(' ') != NOT_FOUND; } @Override protected void setReaction(Message message) { try { String query = getQuery(message.text); String response = loadResponse(query); reaction.add(message.author + ": " + response); } catch (Exception e) { setError(e); } } }