diff --git a/src/nyc/c4q/ramonaharrison/Bot.java b/src/nyc/c4q/ramonaharrison/Bot.java index 6a52dd4..eb428ef 100644 --- a/src/nyc/c4q/ramonaharrison/Bot.java +++ b/src/nyc/c4q/ramonaharrison/Bot.java @@ -2,10 +2,14 @@ import nyc.c4q.ramonaharrison.model.Channel; import nyc.c4q.ramonaharrison.model.Message; +import nyc.c4q.ramonaharrison.model.User; import nyc.c4q.ramonaharrison.network.*; import nyc.c4q.ramonaharrison.network.response.*; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.StringTokenizer; /** * Created by Ramona Harrison @@ -17,7 +21,31 @@ public class Bot { // TODO: implement your bot logic! public Bot() { + } + + public void sendHomeworkLink() { + ListMessagesResponse allResponses = Slack.listMessages("C7KE0KTM4"); + List allMessages = allResponses.getMessages(); + Message lastMessage = allMessages.get(allMessages.size() - 1); + String text = lastMessage.getText(); + HashMap listOfHomeworks = new HashMap<>(); + listOfHomeworks.put("homework1", "https://canvas.instructure.com/courses/1218009/quizzes/2367962"); + listOfHomeworks.put("homework2", "https://github.com/C4Q/AC-Android/blob/master/homework/unit-1/week-2.md"); + listOfHomeworks.put("homework3", "https://github.com/C4Q/AC-Android/blob/master/homework/unit-1/Hw3"); + + if (text.contains("homework1")) { + String link = listOfHomeworks.get("homework1"); + Slack.sendMessage(link); + } + else if (text.contains("homework2")) { + String link = listOfHomeworks.get("homework2"); + Slack.sendMessage(link); + } + else if (text.contains("homework3")) { + String link = listOfHomeworks.get("homework3"); + Slack.sendMessage(link); + } } /** @@ -52,6 +80,7 @@ public void listChannels() { * * @param channelId id of the given channel. */ + public void listMessages(String channelId) { ListMessagesResponse listMessagesResponse = Slack.listMessages(channelId); @@ -75,6 +104,8 @@ public void listMessages(String channelId) { * @param text message text. */ public void sendMessageToBotsChannel(String text) { + PigLatin pigMessage= new PigLatin(text); + text=pigMessage.getPigMessage(); SendMessageResponse sendMessageResponse = Slack.sendMessage(text); if (sendMessageResponse.isOk()) { @@ -98,4 +129,37 @@ public void deleteMessageInBotsChannel(String messageTs) { System.err.print("Error sending message: " + deleteMessageResponse.getError()); } } + public static class PigLatin{ + String pigMessage; + public PigLatin(String pigMessage){ + this.pigMessage = messageToPigLatin(messageToStringArray(pigMessage)); + } + public StringBuilder pigLatin(String s){ + StringBuilder pigLatin=new StringBuilder(s); + String igLatin=pigLatin.substring(1); + pigLatin.delete(1,pigLatin.length()); + pigLatin.insert(0, igLatin); + pigLatin.append("ay"); + return pigLatin; + } + public ArrayList messageToStringArray(String s){ + ArrayList stringArray= new ArrayList<>(); + StringTokenizer pLT = new StringTokenizer(s, " "); + while (pLT.hasMoreTokens()){ + stringArray.add(pLT.nextToken()); + } + return stringArray; + } + public String messageToPigLatin(ArrayList message){ + String messageToPigLatin=""; + for (String s:message){ + messageToPigLatin+= (pigLatin(s) + " "); + } + return messageToPigLatin; + } + + public String getPigMessage() { + return pigMessage; + } + } } diff --git a/src/nyc/c4q/ramonaharrison/Main.java b/src/nyc/c4q/ramonaharrison/Main.java index 933e92b..f074ad0 100644 --- a/src/nyc/c4q/ramonaharrison/Main.java +++ b/src/nyc/c4q/ramonaharrison/Main.java @@ -18,7 +18,11 @@ public static void main(String[] args) { //myBot.sendMessage("Hello, world!"); // Post a pineapple photo to the #bots channel - //myBot.sendMessage("http://weknowyourdreams.com/images/pineapple/pineapple-07.jpg"); + myBot.sendMessageToBotsChannel("I speak in pigLatin now. English is totally lame"); + + // while (true) { + // myBot.sendHomeworkLink(); + //} } } \ No newline at end of file diff --git a/src/nyc/c4q/ramonaharrison/model/Attachment.java b/src/nyc/c4q/ramonaharrison/model/Attachment.java index 8b9d1ef..f82397e 100644 --- a/src/nyc/c4q/ramonaharrison/model/Attachment.java +++ b/src/nyc/c4q/ramonaharrison/model/Attachment.java @@ -1,7 +1,12 @@ package nyc.c4q.ramonaharrison.model; +import org.json.simple.JSONArray; import org.json.simple.JSONObject; + +import java.lang.reflect.Field; +import java.util.ArrayList; + /** * Created by Ramona Harrison * on 8/26/16 @@ -13,27 +18,151 @@ public class Attachment { - // TODO: implement private fields for each of the following attachment JSON keys: - // "fallback" - // "color" - // "pretext" - // "author_name" - // "author_link" - // "author_icon" - // "title" - // "title_link" - // "text" - // "fields" - // "image_url" - // "thumb_url" - // "footer" - // "footer_icon" - // "ts" + private String fallback; + private String color; + private String pretext; + private String author_name; + private String author_link; + private String author_icon; + private String title; + private String title_link; + private String text; + private ArrayList fields; + private String image_url; + private String thumb_url; + private String footer; + private String footer_icon; + private long ts; public Attachment(JSONObject json) { - // TODO: parse an attachment from the incoming json + + if (json.get("fallback") != null) { + this.fallback = (String) json.get("fallback"); + } + + if (json.get("color") != null) { + this.color = (String) json.get("color"); + } + + if (json.get("pretext") != null) { + this.pretext = (String) json.get("pretext"); + } + + if (json.get("author_name") != null) { + this.author_name = (String) json.get("author_name"); + } + + if (json.get("author_link") != null) { + this.author_link = (String) json.get("author_link"); + } + + if (json.get("author_icon") != null) { + this.author_icon = (String) json.get("author_icon"); + } + + if (json.get("title") != null) { + this.title = (String) json.get("title"); + } + + if (json.get("title_link") != null) { + this.title_link = (String) json.get("title_link"); + } + + if (json.get("text") != null) { + this.text = (String) json.get("text"); + } + + if (json.get("fields") != null) { + JSONArray fieldsArray = (JSONArray) json.get("fields"); // need more explanation here + this.fields = new ArrayList(); + for (int i = 0; i < fieldsArray.size(); i++) { + this.fields.add((Field) fieldsArray.get(i)); + } + } + + if (json.get("image_url") != null) { + this.image_url = (String) json.get("image_url"); + } + + if (json.get("thumb_url") != null) { + this.thumb_url = (String) json.get("thumb_url"); + } + + if (json.get("footer") != null) { + this.footer = (String) json.get("footer"); + } + + if (json.get("footer_icon") != null) { + this.footer_icon = (String) json.get("footer_icon"); + } + + if (json.get("ts") != null) { + this.ts = (Long) json.get("ts"); + } + } + // TODO add getters to access private fields + + public String getFallback() { + return fallback; + } + + public String getColor() { + return color; + } + + public String getPretext() { + return pretext; + } + + public String getAuthorName() { + return author_name; + } + + public String getAuthorLink() { + return author_link; + } + public String getAuthorIcon() { + return author_icon; + } + + public String getTitle() { + return title; + } + + public String getTitleLink() { + return title_link; + } + + public String getText() { + return text; + } + + private ArrayList getFields() { + return fields; + } + + + private String getImageUrl() { + return image_url; + } + + private String getThumbUrl() { + return thumb_url; + } + + private String getFooter() { + return footer; + } + + private String getFooterIcon() { + return footer_icon; + } + + private long getTs() { + return ts; + } } diff --git a/src/nyc/c4q/ramonaharrison/model/Field.java b/src/nyc/c4q/ramonaharrison/model/Field.java new file mode 100644 index 0000000..0259fff --- /dev/null +++ b/src/nyc/c4q/ramonaharrison/model/Field.java @@ -0,0 +1,39 @@ +package nyc.c4q.ramonaharrison.model; + +import org.json.simple.JSONObject; + +public class Field { + + + private String title; + private String value; + private boolean short1; + + public Field(JSONObject json) { + + if (json.get("value") != null) { + this.value = (String) json.get("value"); + } + + if (json.get("title") != null) { + this.title = (String) json.get("title"); + } + + if (json.get("short1") != null) { + this.short1 = (boolean) json.get("short1"); + } + + } + + private String getTitle() { + return title; + } + + private String getValue() { + return value; + } + + private boolean isShort1() { + return short1; + } +} diff --git a/src/nyc/c4q/ramonaharrison/model/User.java b/src/nyc/c4q/ramonaharrison/model/User.java index bc309eb..909fc57 100644 --- a/src/nyc/c4q/ramonaharrison/model/User.java +++ b/src/nyc/c4q/ramonaharrison/model/User.java @@ -2,20 +2,14 @@ import org.json.simple.JSONObject; -/** - * Created by Ramona Harrison - * on 8/26/16 - * - * A class representing a user. - * See https://api.slack.com/types/user - * - */ public class User { + private String userInput; + // TODO: implement private fields for each of the following user JSON keys: - // "id" - // "name" + private String id; // "id" + private String pigLatin; // "name" // "deleted" // "color" // "profile" @@ -29,8 +23,83 @@ public class User { // "has_files" public User(JSONObject json) { + + // TODO: parse a user from the incoming json } + public String getUserInput() { + return userInput; + } + + public String getPigLAtin() { + return pigLatin; + } + + public String getId() { + return id; + } + + public void setUserInput(String userInput) { + this.userInput = userInput; + + } + + public void setPigLAtin(String pigLAtin) { + + this.pigLatin = pigLatin; + } + + public void translate(JSONObject json) { + if (json.get("userInput") != null) { + this.userInput = (String) json.get("userInput"); + + } + if (json.get("pigLatin") != null) { + this.pigLatin = pigLatin; + } + } + + public String wordToPigLatin(String word) { + String wordSubstring = word.substring(1); + char firstChar = word.charAt(0); + String ay = "ay"; + String nonLowerCaseResult = wordSubstring + firstChar + ay; + return nonLowerCaseResult.toLowerCase(); + } + + public String sentenceToPigLatin(String sentence) { + String[] wordArray = sentence.split(" "); + for (int i = 0; i < wordArray.length; i++) { + // v3 + String word = wordArray[i]; + String pigLatin = wordToPigLatin(word); + wordArray[i] = pigLatin; + } + + String pigLatinSentence = ""; + for (int i = 0; i < wordArray.length; i++) { + String space = " "; + pigLatinSentence += wordArray[i]; + + int lastIndex = wordArray.length - 1; + if (i != lastIndex) { + pigLatinSentence += space; + } + } + return capitlize(pigLatinSentence); + + } + + public String capitlize(String sentence) { + String firstLetter= sentence.substring(0,1); + String capFirstLetter=firstLetter.toUpperCase(); + String restOfSentence= sentence.substring(1); + return capFirstLetter+restOfSentence; + } + + // TODO add getters to access private fields } + + diff --git a/src/nyc/c4q/ramonaharrison/network/Slack.java b/src/nyc/c4q/ramonaharrison/network/Slack.java index 87521bd..504b9ad 100644 --- a/src/nyc/c4q/ramonaharrison/network/Slack.java +++ b/src/nyc/c4q/ramonaharrison/network/Slack.java @@ -28,7 +28,8 @@ public class Slack { private static final String ENDPOINT_POST_MESSAGE = "chat.postMessage"; private static final String ENDPOINT_DELETE_MESSAGE = "chat.delete"; - public static final String BOTS_CHANNEL_ID = "C2ABKERFT"; + public static final String BOTS_CHANNEL_ID = "C7KE0KTM4"; + public static final String asUser="true"; /** * Static method to test the Slack API. @@ -82,7 +83,7 @@ public static SendMessageResponse sendMessage(String messageText) { throw new RuntimeException(e); } - URL sendMessageUrl = HTTPS.stringToURL(BASE_URL + ENDPOINT_POST_MESSAGE + "?token=" + API_KEY + "&channel=" + BOTS_CHANNEL_ID + "&text=" + messageText); + URL sendMessageUrl = HTTPS.stringToURL(BASE_URL + ENDPOINT_POST_MESSAGE + "?token=" + API_KEY + "&channel=" + BOTS_CHANNEL_ID + "&text=" + messageText + "&as_user=" + asUser); return new SendMessageResponse(HTTPS.get(sendMessageUrl)); } diff --git a/src/nyc/c4q/ramonaharrison/network/response/SendMessageResponse.java b/src/nyc/c4q/ramonaharrison/network/response/SendMessageResponse.java index e183efd..627fcd6 100644 --- a/src/nyc/c4q/ramonaharrison/network/response/SendMessageResponse.java +++ b/src/nyc/c4q/ramonaharrison/network/response/SendMessageResponse.java @@ -21,6 +21,7 @@ public class SendMessageResponse extends Response { public SendMessageResponse(JSONObject json) { super(json); + if (json.get("channel") != null) { this.channel = (String) json.get("channel"); } @@ -32,6 +33,7 @@ public SendMessageResponse(JSONObject json) { if (json.get("message") != null) { this.message = new Message((JSONObject) json.get("message")); } + } public String getChannel() {