From 5b247d6063aff2bfb891c82f1945a44b800ffb01 Mon Sep 17 00:00:00 2001 From: JoeJoePotato <34780073+JoeJoePotato@users.noreply.github.com> Date: Wed, 12 May 2021 19:53:00 -0700 Subject: [PATCH 1/4] Fantasy Name Generator --- .../discord_bot_example/Bot.java | 5 ++ .../jointheleague/modules/FantasyName.java | 56 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/org/jointheleague/modules/FantasyName.java diff --git a/src/main/java/org/jointheleague/discord_bot_example/Bot.java b/src/main/java/org/jointheleague/discord_bot_example/Bot.java index 06e330bf..28239a11 100644 --- a/src/main/java/org/jointheleague/discord_bot_example/Bot.java +++ b/src/main/java/org/jointheleague/discord_bot_example/Bot.java @@ -47,6 +47,10 @@ public void connect(boolean printInvite) { api.addMessageCreateListener(dl); helpListener.addHelpEmbed(dl.getHelpEmbed()); + FantasyName fn = new FantasyName(channelName); + api.addMessageCreateListener(fn); + helpListener.addHelpEmbed(fn.getHelpEmbed()); + CurrencyConverter cc = new CurrencyConverter(channelName); api.addMessageCreateListener(cc); helpListener.addHelpEmbed(cc.getHelpEmbed()); @@ -195,5 +199,6 @@ public void connect(boolean printInvite) { api.addMessageCreateListener(new StarSignSeeker(channelName)); api.addMessageCreateListener(new War(channelName)); //api.addMessageCreateListener(new Depression(channelName)); + } } diff --git a/src/main/java/org/jointheleague/modules/FantasyName.java b/src/main/java/org/jointheleague/modules/FantasyName.java new file mode 100644 index 00000000..2b9503d5 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/FantasyName.java @@ -0,0 +1,56 @@ +package org.jointheleague.modules; + +import java.util.Random; + + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.modules.pojo.HelpEmbed; + +public class FantasyName extends CustomMessageCreateListener { + + String mnames[]= {"Finwe", "Feanor", "Fingolfin", "Finarfin", "Fingon", "Turgon", "Eol", "Maeglin", "Tuor", "Earendil", "Eldros", "Finrod", "Orodreth", "Aegnor", "Angrod", "Olwe", "Thingol", "Beren", "Dior"}; + // + String fnames[]= {"Miriel", "Indis", "Earwen", "Idril", "Elwing", "Melian", "Nimloth", "Luthien", "Rian", "Morwen"}; + + private static final String COMMAND = "!fantasyname"; + + public FantasyName(String channelName) { + super(channelName); + helpEmbed = new HelpEmbed(COMMAND, "Allows you to generate a high fantasy name. Gender can be specified by appending 'm' or 'f' to your message."); + // + + + } + + @Override + public void handle(MessageCreateEvent event) { + if (event.getMessageContent().contains(COMMAND)) { + + String cmd = event.getMessageContent(); + Boolean f=false; + Random r = new Random(); + + if(cmd.contains("f")) { + f=true; + }else if(cmd.contains("m")) { + f=false; + }else { + if(r.nextInt(2)==0) { + f=true; + }else { + f=false; + } + } + + if(f==true) { + String name=fnames[r.nextInt(fnames.length)]; + event.getChannel().sendMessage(name); + }else { + String name=mnames[r.nextInt(mnames.length)]; + event.getChannel().sendMessage(name); + } + + } + } + +} From 4e2e90cf574558d2b1d2a39ab946b35ebbc1acec Mon Sep 17 00:00:00 2001 From: JoeJoePotato <34780073+JoeJoePotato@users.noreply.github.com> Date: Wed, 7 Jul 2021 17:19:25 -0700 Subject: [PATCH 2/4] dndhelper --- .../discord_bot_example/Bot.java | 8 + .../discord_bot_example/Launcher.java | 1 + .../org/jointheleague/modules/DnDRules.java | 183 ++++++++++++++++++ .../jointheleague/modules/FantasyName.java | 10 +- .../org/jointheleague/modules/GetXkcd.java | 133 +++++++++++++ .../org/jointheleague/modules/pojo/XKCD.java | 57 ++++++ .../modules/pojo/dnd/Feature.java | 38 ++++ .../modules/pojo/dnd/MiniClass.java | 13 ++ .../modules/pojo/dnd/SchoolOMagic.java | 14 ++ .../jointheleague/modules/pojo/dnd/Spell.java | 147 ++++++++++++++ src/main/resources/config.json | 4 +- 11 files changed, 604 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/jointheleague/modules/DnDRules.java create mode 100644 src/main/java/org/jointheleague/modules/GetXkcd.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/XKCD.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Feature.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/MiniClass.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/SchoolOMagic.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Spell.java diff --git a/src/main/java/org/jointheleague/discord_bot_example/Bot.java b/src/main/java/org/jointheleague/discord_bot_example/Bot.java index 28239a11..0aca3104 100644 --- a/src/main/java/org/jointheleague/discord_bot_example/Bot.java +++ b/src/main/java/org/jointheleague/discord_bot_example/Bot.java @@ -47,9 +47,17 @@ public void connect(boolean printInvite) { api.addMessageCreateListener(dl); helpListener.addHelpEmbed(dl.getHelpEmbed()); + DnDRules dnd = new DnDRules(channelName); + api.addMessageCreateListener(dnd); + helpListener.addHelpEmbed(dnd.getHelpEmbed()); + FantasyName fn = new FantasyName(channelName); api.addMessageCreateListener(fn); helpListener.addHelpEmbed(fn.getHelpEmbed()); + + GetXkcd xkcd = new GetXkcd(channelName); + api.addMessageCreateListener(xkcd); + helpListener.addHelpEmbed(xkcd.getHelpEmbed()); CurrencyConverter cc = new CurrencyConverter(channelName); api.addMessageCreateListener(cc); diff --git a/src/main/java/org/jointheleague/discord_bot_example/Launcher.java b/src/main/java/org/jointheleague/discord_bot_example/Launcher.java index fdbfb858..fbfa077f 100644 --- a/src/main/java/org/jointheleague/discord_bot_example/Launcher.java +++ b/src/main/java/org/jointheleague/discord_bot_example/Launcher.java @@ -1,3 +1,4 @@ + package org.jointheleague.discord_bot_example; import java.util.Map; diff --git a/src/main/java/org/jointheleague/modules/DnDRules.java b/src/main/java/org/jointheleague/modules/DnDRules.java new file mode 100644 index 00000000..5f6894e3 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/DnDRules.java @@ -0,0 +1,183 @@ +package org.jointheleague.modules; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.util.Random; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonReader; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.modules.pojo.HelpEmbed; +import org.jointheleague.modules.pojo.dnd.Feature; +import org.jointheleague.modules.pojo.dnd.Spell; + +import com.google.gson.Gson; + +public class DnDRules extends CustomMessageCreateListener{ + public DnDRules(String channelName) { + super(channelName); + helpEmbed = new HelpEmbed(COMMAND, "Add a category (\"spell\", \"monster\", or \"feature\") and then the specific object. Example: !dndspellacid arrow"); + + } + + private static final String COMMAND = "!dnd"; + + private final Gson gson = new Gson(); + + + @Override + public void handle(MessageCreateEvent event) { + if(event.getMessageContent().contains(COMMAND)) { + + //remove the command so we are only left with the search term + String msg = event.getMessageContent().replaceAll(" ", "-").replace(COMMAND, ""); + + if(msg.contains("feature")) { + String lol=msg.replace("feature", ""); + getFeature(lol, event); + }else if(msg.contains("spell")) { + String lol=msg.replace("spell", ""); + getSpell(lol, event); + } + } + } + + public void getFeature(String msg, MessageCreateEvent event) { + + String requestURL = "https://www.dnd5eapi.co/api/features/"+msg; + System.out.println(requestURL); + + URL url; + try { + url = new URL(requestURL); + + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + JsonReader repoReader = Json.createReader(con.getInputStream()); + JsonObject userJSON = ((JsonObject) repoReader.read()); + con.disconnect(); + + //turn the json response into a java object + //you will need to create a java class that represents the response in org.jointheleague.modules.pojo + //you can use a tools like Postman and jsonschema2pojo.com to help with that + + //you can use postman to make the request and receive a response, then take that and put it right into jsonschema2pojo.com + //If using jsonschema2pojo.com, select Target Langue = java, Source Type = JSON, Annotation Style = Gson + + + //get the first article (these are just java objects now) + Feature feat= gson.fromJson(userJSON.toString(), Feature.class); + + + //get the title of the article + String name = feat.getTitle(); + + //get the content of the article + String cclass = feat.getParent(); + int level =feat.getLevel(); + String[] desc=feat.getText(); + //create the message + + event.getChannel().sendMessage("**"+name+"**"); + event.getChannel().sendMessage("*level "+level+" "+cclass+" class feature*"); + for (int i = 0; i < desc.length; i++) { + event.getChannel().sendMessage(desc[i]); + + } + + + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + public void getSpell(String msg, MessageCreateEvent event) { + + String requestURL = "https://www.dnd5eapi.co/api/spells/"+msg; + System.out.println(requestURL); + + URL url; + try { + url = new URL(requestURL); + + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + JsonReader repoReader = Json.createReader(con.getInputStream()); + JsonObject userJSON = ((JsonObject) repoReader.read()); + con.disconnect(); + + //turn the json response into a java object + //you will need to create a java class that represents the response in org.jointheleague.modules.pojo + //you can use a tools like Postman and jsonschema2pojo.com to help with that + + //you can use postman to make the request and receive a response, then take that and put it right into jsonschema2pojo.com + //If using jsonschema2pojo.com, select Target Langue = java, Source Type = JSON, Annotation Style = Gson + + + //get the first article (these are just java objects now) + Spell spell= gson.fromJson(userJSON.toString(), Spell.class); + + + //get the title of the article + String name = spell.getName(); + + //get the content of the article + String l2 = spell.getLine2(); + String duration=spell.getDuration(); + String[] desc=spell.gettext(); + String range=spell.getRange(); + String tcast=spell.getTime(); + String components=spell.getComponents(); + String upcast=spell.athigherlevels(); + Boolean ritual=spell.ritual(); + String classes=spell.getClasses(); + //create the message + if(ritual==false) { + event.getChannel().sendMessage("**"+name+"**"); + }else { + event.getChannel().sendMessage("**"+name+"**"+" (ritual)"); + } + event.getChannel().sendMessage("*"+l2+"*"); + event.getChannel().sendMessage("**casting time:** "+tcast); + event.getChannel().sendMessage("**range:** "+range); + event.getChannel().sendMessage("**components:** "+components); + event.getChannel().sendMessage("**duration:** "+duration); + for (int i = 0; i < desc.length; i++) { + event.getChannel().sendMessage(desc[i]); + } + if(upcast.length()>0) { + event.getChannel().sendMessage("**at higher levels:** "+upcast); + } + event.getChannel().sendMessage("Available to: "+classes); + + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + +} diff --git a/src/main/java/org/jointheleague/modules/FantasyName.java b/src/main/java/org/jointheleague/modules/FantasyName.java index 2b9503d5..4815e7ab 100644 --- a/src/main/java/org/jointheleague/modules/FantasyName.java +++ b/src/main/java/org/jointheleague/modules/FantasyName.java @@ -30,9 +30,15 @@ public void handle(MessageCreateEvent event) { Boolean f=false; Random r = new Random(); - if(cmd.contains("f")) { + if(cmd.length()==12) { + if(r.nextInt(2)==0) { + f=true; + }else { + f=false; + } + }else if (cmd.charAt(12)=='f') { f=true; - }else if(cmd.contains("m")) { + }else if(cmd.charAt(12)=='m') { f=false; }else { if(r.nextInt(2)==0) { diff --git a/src/main/java/org/jointheleague/modules/GetXkcd.java b/src/main/java/org/jointheleague/modules/GetXkcd.java new file mode 100644 index 00000000..d37cbec0 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/GetXkcd.java @@ -0,0 +1,133 @@ +package org.jointheleague.modules; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.util.Random; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonReader; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.modules.pojo.HelpEmbed; +import org.jointheleague.modules.pojo.XKCD; +import org.jointheleague.modules.pojo.apiExample.ApiExampleWrapper; +import org.jointheleague.modules.pojo.apiExample.Article; + +import com.google.gson.Gson; + +public class GetXkcd extends CustomMessageCreateListener{ + public GetXkcd(String channelName) { + super(channelName); + helpEmbed = new HelpEmbed(COMMAND, "Get the xkcd of a given number. 0 will give a random xkcd. An number for which there is not yet an xkcd will give you the latest xkcd."); + + } + + private static final String COMMAND = "!getxkcd"; + private final Gson gson = new Gson(); + + int latestcomic=2473; + //HEY PERSON IN THE FUTURE + //Yes you! Please update latestcomic to whatecer the number of the latest xkcd is. + //Go to xkcd.com, go back one, go forward one, and look at the number in the url + //Thanks! + + + @Override + public void handle(MessageCreateEvent event) { + if(event.getMessageContent().contains(COMMAND)) { + + //remove the command so we are only left with the search term + String msg = event.getMessageContent().replaceAll(" ", "").replace(COMMAND, ""); + + if (msg.equals("")) { + event.getChannel().sendMessage("Please put a number after the command"); + } else { + getComic(Integer.parseInt(msg), event); + + } + + } + } + + public void getComic(int comic, MessageCreateEvent event) { + + //create the request URL (can be found in the documentation) + if(comic==0) { + Random r=new Random(); + comic=r.nextInt(latestcomic)+1; + } + + + String requestURL = "https://xkcd.com/"+comic+"/info.0.json"; + + if(comic>latestcomic) { + requestURL = "https://xkcd.com/info.0.json"; + } + + //the following code will probably be the same for your feature + URL url; + try { + url = new URL(requestURL); + + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + JsonReader repoReader = Json.createReader(con.getInputStream()); + JsonObject userJSON = ((JsonObject) repoReader.read()); + con.disconnect(); + + //turn the json response into a java object + //you will need to create a java class that represents the response in org.jointheleague.modules.pojo + //you can use a tools like Postman and jsonschema2pojo.com to help with that + + //you can use postman to make the request and receive a response, then take that and put it right into jsonschema2pojo.com + //If using jsonschema2pojo.com, select Target Langue = java, Source Type = JSON, Annotation Style = Gson + + + //get the first article (these are just java objects now) + XKCD strip = gson.fromJson(userJSON.toString(), XKCD.class); + + + //get the title of the article + String title = strip.getTitle(); + + //get the content of the article + String image = strip.getImage(); + String date =strip.getDate(); + + //create the message + String alt=strip.getAlt(); + if(comic<=latestcomic) { + event.getChannel().sendMessage("xkcd comic "+comic+": "+title); + }else { + event.getChannel().sendMessage("xkcd comic "+latestcomic+": "+title); + } + if(date.contentEquals("1179")) { + event.getChannel().sendMessage("From: "+date+" (see below)"); + }else { + event.getChannel().sendMessage("From: "+date+" (see #1179)"); + } + event.getChannel().sendMessage(image); + event.getChannel().sendMessage("Mouseover text: "+alt); + + + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + +} diff --git a/src/main/java/org/jointheleague/modules/pojo/XKCD.java b/src/main/java/org/jointheleague/modules/pojo/XKCD.java new file mode 100644 index 00000000..1a95a1dc --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/XKCD.java @@ -0,0 +1,57 @@ +package org.jointheleague.modules.pojo; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class XKCD { + @SerializedName("month") + @Expose + private String month; + @SerializedName("num") + @Expose + private String num; + @SerializedName("link") + @Expose + private String link; + @SerializedName("year") + @Expose + private String year; + @SerializedName("news") + @Expose + private String news; + @SerializedName("safe_title") + @Expose + private String safe_title; + @SerializedName("transcript") + @Expose + private String transcript; + @SerializedName("alt") + @Expose + private String mouseovert; + @SerializedName("img") + @Expose + private String img; + @SerializedName("title") + @Expose + private String title; + @SerializedName("day") + @Expose + private String day; + + public String getTitle() { + return title; + } + + public String getImage() { + return img; + } + public String getAlt() { + return mouseovert; + } + public String getDate() { + return year+"-"+month+"-"+day; + //official ISO way to write a date + } + + +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Feature.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Feature.java new file mode 100644 index 00000000..be408a05 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Feature.java @@ -0,0 +1,38 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Feature { + @SerializedName("name") + @Expose + private String name; + @SerializedName("class") + @Expose + private MiniClass parentclass; + @SerializedName("level") + @Expose + private int level; + @SerializedName("desc") + @Expose + private String[] text; + + public String getTitle() { + return(name); + } + + + public String getParent() { + return parentclass.getName(); + } + + public String[] getText() { + return text; + } + public int getLevel() { + return level; + } + + } + + diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/MiniClass.java b/src/main/java/org/jointheleague/modules/pojo/dnd/MiniClass.java new file mode 100644 index 00000000..eb40f6b8 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/MiniClass.java @@ -0,0 +1,13 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class MiniClass { + @SerializedName("name") + @Expose + private String name; +public String getName() { + return name; +} +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/SchoolOMagic.java b/src/main/java/org/jointheleague/modules/pojo/dnd/SchoolOMagic.java new file mode 100644 index 00000000..1a2ef4e6 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/SchoolOMagic.java @@ -0,0 +1,14 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class SchoolOMagic { +@SerializedName("name") +@Expose +private String name; + +public String getName() { + return name; +} +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Spell.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Spell.java new file mode 100644 index 00000000..4e432517 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Spell.java @@ -0,0 +1,147 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Spell { + @SerializedName("name") + @Expose + private String name; + + @SerializedName("desc") + @Expose + private String[] text; + + @SerializedName("higher_level") + @Expose + private String[] upcast; + + @SerializedName("components") + @Expose + private String[] comps; + + @SerializedName("material") + @Expose + private String material; + + @SerializedName("range") + @Expose + private String range; + + @SerializedName("ritual") + @Expose + private Boolean ritual; + + @SerializedName("duration") + @Expose + private String duration; + + @SerializedName("concentration") + @Expose + private Boolean concentration; + + @SerializedName("casting_time") + @Expose + private String tcast; + + @SerializedName("level") + @Expose + private int level; + + @SerializedName("school") + @Expose + private SchoolOMagic school; + + @SerializedName("classes") + @Expose + private MiniClass[] available; + + + public String getName() { + + return name; + } + public Boolean ritual() { + + return ritual; + } + + public String getLine2() { + String s=""; + if(level==0) {; + s=school.getName()+" cantrip"; + }else if(level==1) { + s=level+"st-level "+school.getName(); + } else if(level==2) { + s=level+"nd-level "+school.getName(); + }else if(level==3) { + s=level+"rd-level "+school.getName(); + }else { + s=level+"th-level "+school.getName(); + } + + return s; + } + public String getTime() { + return tcast; + } + public String getRange() { + return range; + } + public String getClasses() { + String s=""; + for (int i = 0; i < available.length; i++) { + if(i<(available.length-1)) { + s+=available[i].getName()+", "; + }else { + s+=available[i].getName(); + } + + } + return s; + + } + public String getComponents() { + String s=""; + + for (int i = 0; i < comps.length; i++) { + if(i<(comps.length-1)) { + s+=comps[i]+", "; + }else { + s+=comps[i]; + } + } + + + if(comps[comps.length-1].contentEquals("M")) { + s+=" ("+material+")"; + } + + return s; + } + public String getDuration() { + String s=duration; + if(concentration==true) { + s+=" (concentration)"; + } + return s; + } + + + + public String[] gettext() { + return text; + } + public String athigherlevels() { + String s=""; + if(upcast !=null) { + for (int i = 0; i < upcast.length; i++) { + s+=upcast[i]; + } + } + return s; + } + + + +} diff --git a/src/main/resources/config.json b/src/main/resources/config.json index 0b58c8d9..c78a4f9d 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -1,4 +1,4 @@ { - "channels": ["channelName"], - "token": "discordToken" + "channels": ["graham"], + "token": "ODQ1NzEyOTc1Mjg5MjUzODg4.YKk9lQ.sZ-1arn6yh34JJUq0hUWBjh0dhI" } From 892ee90e2ea59b43959930b8ced106fc80ec95aa Mon Sep 17 00:00:00 2001 From: JoeJoePotato <34780073+JoeJoePotato@users.noreply.github.com> Date: Wed, 11 Aug 2021 18:27:11 -0700 Subject: [PATCH 3/4] finish feature 3 --- .../org/jointheleague/modules/DnDRules.java | 93 ++++++ .../modules/pojo/dnd/Action.java | 21 ++ .../modules/pojo/dnd/MiniProf.java | 23 ++ .../modules/pojo/dnd/Monster.java | 279 ++++++++++++++++++ .../modules/pojo/dnd/Proficiency.java | 26 ++ .../jointheleague/modules/pojo/dnd/Sense.java | 42 +++ .../jointheleague/modules/pojo/dnd/Speed.java | 40 +++ 7 files changed, 524 insertions(+) create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Action.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/MiniProf.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Proficiency.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Sense.java create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Speed.java diff --git a/src/main/java/org/jointheleague/modules/DnDRules.java b/src/main/java/org/jointheleague/modules/DnDRules.java index 5f6894e3..fb773b1f 100644 --- a/src/main/java/org/jointheleague/modules/DnDRules.java +++ b/src/main/java/org/jointheleague/modules/DnDRules.java @@ -14,6 +14,7 @@ import org.javacord.api.event.message.MessageCreateEvent; import org.jointheleague.modules.pojo.HelpEmbed; import org.jointheleague.modules.pojo.dnd.Feature; +import org.jointheleague.modules.pojo.dnd.Monster; import org.jointheleague.modules.pojo.dnd.Spell; import com.google.gson.Gson; @@ -43,6 +44,9 @@ public void handle(MessageCreateEvent event) { }else if(msg.contains("spell")) { String lol=msg.replace("spell", ""); getSpell(lol, event); + }else if(msg.contains("monster")) { + String lol=msg.replace("monster", ""); + getMonster(lol, event); } } } @@ -178,6 +182,95 @@ public void getSpell(String msg, MessageCreateEvent event) { + } + public void getMonster(String msg, MessageCreateEvent event) { + + String requestURL = "https://www.dnd5eapi.co/api/monsters/"+msg; + System.out.println(requestURL); + + URL url; + try { + url = new URL(requestURL); + + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + JsonReader repoReader = Json.createReader(con.getInputStream()); + JsonObject userJSON = ((JsonObject) repoReader.read()); + con.disconnect(); + + //turn the json response into a java object + //you will need to create a java class that represents the response in org.jointheleague.modules.pojo + //you can use a tools like Postman and jsonschema2pojo.com to help with that + + //you can use postman to make the request and receive a response, then take that and put it right into jsonschema2pojo.com + //If using jsonschema2pojo.com, select Target Langue = java, Source Type = JSON, Annotation Style = Gson + + + //get the first article (these are just java objects now) + Monster m= gson.fromJson(userJSON.toString(), Monster.class); + + + event.getChannel().sendMessage(m.getName()); + event.getChannel().sendMessage(m.getTypes()); + event.getChannel().sendMessage("**----------------**"); + event.getChannel().sendMessage(m.getAC()); + event.getChannel().sendMessage(m.getHP()); + event.getChannel().sendMessage(m.getSpeed()); + event.getChannel().sendMessage("**----------------**"); + event.getChannel().sendMessage(m.getScores()); + event.getChannel().sendMessage("**----------------**"); + if(m.getSaves().length()>=0) { + event.getChannel().sendMessage(m.getSaves()); + } + if(m.getProfs().length()>=0) { + event.getChannel().sendMessage(m.getProfs()); + } + if(m.getProfs().length()>=0) { + event.getChannel().sendMessage(m.getProfs()); + } + if(m.getV().length()>=0) { + event.getChannel().sendMessage(m.getV()); + } + if(m.getR().length()>=0) { + event.getChannel().sendMessage(m.getR()); + } + if(m.getI().length()>=0) { + event.getChannel().sendMessage(m.getI()); + } + if(m.getCI().length()>=0) { + event.getChannel().sendMessage(m.getCI()); + } + event.getChannel().sendMessage(m.getSenses()); + event.getChannel().sendMessage(m.getLangs()); + event.getChannel().sendMessage(m.getCR()); + event.getChannel().sendMessage("**----------------**"); + event.getChannel().sendMessage(m.getAbilities()); + event.getChannel().sendMessage("**Actions**"); + event.getChannel().sendMessage("----------------"); + event.getChannel().sendMessage(m.getActions()); + if(m.getLActions().length() >=0) { + event.getChannel().sendMessage("**Legendary Actions**"); + event.getChannel().sendMessage("----------------"); + event.getChannel().sendMessage("The "+m.getSmallName()+" can take 3 legendary actions, choosing from the options below. Only one legendary action option can be used at a time and only at the end of another creature's turn. The sphinx regains spent legendary actions at the start of its turn."); + event.getChannel().sendMessage(m.getLActions()); + } + + + + + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } } diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java new file mode 100644 index 00000000..1149d0e7 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java @@ -0,0 +1,21 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +public class Action { +@SerializedName("name") + @Expose + private String name; + + @SerializedName("desc") + @Expose + private String text; + + public String getName() { + return name; + } + + public String getText() { + return text; + } +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/MiniProf.java b/src/main/java/org/jointheleague/modules/pojo/dnd/MiniProf.java new file mode 100644 index 00000000..cd68cd43 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/MiniProf.java @@ -0,0 +1,23 @@ +package org.jointheleague.modules.pojo.dnd; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +public class MiniProf { + @SerializedName("name") + @Expose + private String name; + + public String getName() { + String s=name; + s = s.replace("Skill: ", ""); + s = s.replace("Saving Throw: ", ""); + return s; + } + public String getType() { + if(name.contains("Skill:")) { + return "skill"; + }else if(name.contains("Saving Throw:")) { + return "saving throw"; + } + return null; + } +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java new file mode 100644 index 00000000..e04d5355 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java @@ -0,0 +1,279 @@ +package org.jointheleague.modules.pojo.dnd; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Monster { + @SerializedName("name") + @Expose + private String name; + @SerializedName("size") + @Expose + private String size; + @SerializedName("type") + @Expose + private String type; + @SerializedName("subtype") + @Expose + private String subtype; + @SerializedName("alignment") + @Expose + private String alignment; + @SerializedName("armor_class") + @Expose + private int ac; + @SerializedName("hit_points") + @Expose + private int hp; + @SerializedName("hit_dice") + @Expose + private String hd; + @SerializedName("speed") + @Expose + private Speed spd; + @SerializedName("strength") + @Expose + private int str; + @SerializedName("dexterity") + @Expose + private int dex; + @SerializedName("constitution") + @Expose + private int con; + @SerializedName("intelligence") + @Expose + private int intel; + @SerializedName("wisdom") + @Expose + private int wis; + @SerializedName("charisma") + @Expose + private int cha; + @SerializedName("proficiency") + @Expose + private Proficiency[] proficiencies; + @SerializedName("damage_vulnerabilities") + @Expose + private String[] dv; + @SerializedName("damage_immunities") + @Expose + private String[] di; + @SerializedName("damage_resistances") + @Expose + private String[] dr; + @SerializedName("condition_immunities") + @Expose + private MiniClass[] ci; + @SerializedName("senses") + @Expose + private Sense senses; + @SerializedName("languages") + @Expose + private String langs; + @SerializedName("challenge_rating") + @Expose + private int cr; + @SerializedName("xp") + @Expose + private int xp; + @SerializedName("special_abilities") + @Expose + private Action[] abilities; + @SerializedName("actions") + @Expose + private Action[] actions; + @SerializedName("legendary_actions") + @Expose + private Action[] lactions; + + public String getName() { + return "***"+name.toUpperCase()+"***"; + } + public String getSmallName() { + return name; + } + + public String getTypes() { + String s="*"+size+" "+type; + if(subtype !=null) { + s+=" ("+subtype+")"+", "; + }else { + s+=", "; + } + s+=alignment+"*"; + + return s; + } + public String getAC() { + + return "**Armor Class** "+ac; + } + public String getHP() { + + return "**Hit Points** "+hp+" ("+hd+")"; + } + public String getSpeed() { + + return "**Speed** "+spd.getSpeeds(); + } + public String getScores() { + String s=""; + int mstr=((str-10)/2)-(((str-10)/2)%1); + if(mstr>=0) { + s+="**str** "+str+" (+"+mstr+") "; + }else { + s+="**str** "+str+" ("+mstr+") "; + } + int mdex=((dex-10)/2)-(((dex-10)/2)%1); + if(mdex>=0) { + s+="**dex** "+dex+" (+"+mdex+") "; + }else { + s+="**dex** "+dex+" ("+mdex+") "; + } + int mcon=((con-10)/2)-(((con-10)/2)%1); + if(mcon>=0) { + s+="**con** "+con+" (+"+mcon+") "; + }else { + s+="**con** "+con+" ("+mcon+") "; + } + int mintel=((intel-10)/2)-(((intel-10)/2)%1); + if(mintel>=0) { + s+="**int** "+intel+" (+"+mintel+") "; + }else { + s+="**int** "+intel+" ("+mintel+") "; + } + int mwis=((wis-10)/2)-(((wis-10)/2)%1); + if(mwis>=0) { + s+="**wis** "+wis+" (+"+mwis+") "; + }else { + s+="**wis** "+wis+" ("+mwis+") "; + } + int mcha=((cha-10)/2)-(((cha-10)/2)%1); + if(mcha>=0) { + s+="**cha** "+cha+" (+"+mcha+") "; + }else { + s+="**cha** "+cha+" ("+mcha+") "; + } + + return s; + } + + public String getSaves() { + + String s=""; + if(proficiencies !=null) { + for (int i = 0; i < proficiencies.length; i++) { + if(proficiencies[i].getStyle()=="saving throw") { + if(s.length()==0) { + s+="**Saving Throws** "+proficiencies[i].getProf(); + }else { + s+=", "+proficiencies[i].getProf(); + } + } + } + } + return s; + } + + public String getProfs() { + + String s=""; + if(proficiencies !=null) { + for (int i = 0; i < proficiencies.length; i++) { + if(proficiencies[i].getStyle()=="skill") { + if(s.length()==0) { + s+="**Skills** "+proficiencies[i].getProf(); + }else { + s+=", "+proficiencies[i].getProf(); + } + } + } + } + return s; + } + + public String getV() { + + String s=""; + if(dv.length!=0) { + s="**Damage Vulnerabilities** "; + for (int i = 0; i < dv.length; i++) { + s+=", "+dv[i]; + } + } + + return s; + } + public String getR() { + + String s=""; + if(dr.length!=0) { + s="**Damage Resistances** "; + for (int i = 0; i < dr.length; i++) { + s+=", "+dr[i]; + } + } + return s; + } + public String getCI() { + + String s=""; + if(ci.length!=0) { + s="**Condition Immunities** "; + for (int i = 0; i < ci.length; i++) { + s+=", "+ci[i].getName(); + } + } + return s; + } + public String getI () { + + String s=""; + if(di.length!=0) { + s="**Damage Immunities** "; + for (int i = 0; i < di.length; i++) { + s+=", "+di[i]; + } + } + return s; + } + public String getSenses() { + return senses.getSenses(); + } + public String getLangs() { + return "**Languages** "+langs; + } + + public String getCR() { + return "**Challenge** "+cr+" ("+xp+" XP)"; + } + + public String getAbilities() { + String s=""; + for (int i = 0; i < abilities.length; i++) { + s+="***"+abilities[i].getName()+".***"; + s+=" "+abilities[i].getText()+"\n"; + } + return s; + } + + + + public String getActions() { + String s=""; + for (int i = 0; i < actions.length; i++) { + s+="***"+actions[i].getName()+".***"; + s+=" "+actions[i].getText()+"\n"; + } + return s; + } + + public String getLActions() { + String s=""; + for (int i = 0; i < lactions.length; i++) { + s+="***"+lactions[i].getName()+".***"; + s+=" "+lactions[i].getText()+"\n"; + } + return s; + } + +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Proficiency.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Proficiency.java new file mode 100644 index 00000000..21a7df67 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Proficiency.java @@ -0,0 +1,26 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Proficiency { + @SerializedName("proficiency") + @Expose + private MiniProf p; + @SerializedName("value") + @Expose + private int v; + + public String getProf() { + if(v>=0) { + return p.getName()+" +"+v; + }else { + return p.getName()+" "+v; + } + } + + public String getStyle() { + return p.getType(); + } + +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Sense.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Sense.java new file mode 100644 index 00000000..c3f42f96 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Sense.java @@ -0,0 +1,42 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Sense { + @SerializedName("blindsight") + @Expose + private String bs; + @SerializedName("darkvision") + @Expose + private String dv; + @SerializedName("tremorsense") + @Expose + private String tremor; + @SerializedName("truesight") + @Expose + private String ts; + @SerializedName("passive_perception") + @Expose + private int pp; + + public String getSenses() { + String s="**Senses** "; + if(bs != null) { + s+="Blindsight "+bs+", "; + } + if(dv != null) { + s+="Darkvision "+dv+", "; + } + if(tremor != null) { + s+="Tremorsense "+tremor+", "; + } + if(ts != null) { + s+="Truesight "+ts+", "; + } + + s+="passive Perception "+pp; + + return s; + } +} diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Speed.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Speed.java new file mode 100644 index 00000000..e05b7ccb --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Speed.java @@ -0,0 +1,40 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Speed { + @SerializedName("walk") + @Expose + private String walk; + @SerializedName("burrow") + @Expose + private String b; + @SerializedName("climb") + @Expose + private String c; + @SerializedName("fly") + @Expose + private String f; + @SerializedName("swim") + @Expose + private String sw; + public String getSpeeds() { + String s=""; + s+=walk; + if(b != null) { + s+=", burrow "+b; + } + if(c != null) { + s+=", climb "+c; + } + if(f != null) { + s+=", fly "+f; + } + if(sw != null) { + s+=", swim "+sw; + } + + return s; +} +} From dc02b9fe1f1878d16542c30cca01e0c5e790b760 Mon Sep 17 00:00:00 2001 From: JoeJoePotato <34780073+JoeJoePotato@users.noreply.github.com> Date: Sun, 22 Aug 2021 12:19:03 -0700 Subject: [PATCH 4/4] Finished DnDRules --- .../org/jointheleague/modules/DnDRules.java | 7 +++ .../modules/pojo/dnd/Action.java | 13 ++++- .../modules/pojo/dnd/Monster.java | 4 +- .../jointheleague/modules/pojo/dnd/Usage.java | 53 +++++++++++++++++++ src/main/resources/config.json | 2 +- 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/jointheleague/modules/pojo/dnd/Usage.java diff --git a/src/main/java/org/jointheleague/modules/DnDRules.java b/src/main/java/org/jointheleague/modules/DnDRules.java index fb773b1f..fdf68392 100644 --- a/src/main/java/org/jointheleague/modules/DnDRules.java +++ b/src/main/java/org/jointheleague/modules/DnDRules.java @@ -1,6 +1,7 @@ package org.jointheleague.modules; import java.io.IOException; + import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; @@ -19,6 +20,11 @@ import com.google.gson.Gson; + + +//NOTE TO SELF REDO TOKEN ENTRY + + public class DnDRules extends CustomMessageCreateListener{ public DnDRules(String channelName) { super(channelName); @@ -247,6 +253,7 @@ public void getMonster(String msg, MessageCreateEvent event) { event.getChannel().sendMessage(m.getAbilities()); event.getChannel().sendMessage("**Actions**"); event.getChannel().sendMessage("----------------"); + System.out.println(m.getActions()); event.getChannel().sendMessage(m.getActions()); if(m.getLActions().length() >=0) { event.getChannel().sendMessage("**Legendary Actions**"); diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java index 1149d0e7..241aa818 100644 --- a/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Action.java @@ -10,9 +10,20 @@ public class Action { @SerializedName("desc") @Expose private String text; + @SerializedName("usage") + @Expose + private Usage usage; public String getName() { - return name; + String s=name; + if(usage!=null) { + + s+=usage.getUsage(); + + }else { + System.out.println("no usages for "+name); + } + return s; } public String getText() { diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java index e04d5355..9a304abb 100644 --- a/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Monster.java @@ -77,10 +77,10 @@ public class Monster { private int xp; @SerializedName("special_abilities") @Expose - private Action[] abilities; + private Action[] abilities=new Action[] {}; @SerializedName("actions") @Expose - private Action[] actions; + private Action[] actions=new Action[] {}; @SerializedName("legendary_actions") @Expose private Action[] lactions; diff --git a/src/main/java/org/jointheleague/modules/pojo/dnd/Usage.java b/src/main/java/org/jointheleague/modules/pojo/dnd/Usage.java new file mode 100644 index 00000000..4fe4b0e2 --- /dev/null +++ b/src/main/java/org/jointheleague/modules/pojo/dnd/Usage.java @@ -0,0 +1,53 @@ +package org.jointheleague.modules.pojo.dnd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +public class Usage { + + + +@SerializedName("type") +@Expose +private String type; + +@SerializedName("min_value") +@Expose +private int minimum; + +@SerializedName("times") +@Expose +private int times; + +@SerializedName("rest_types") +@Expose +private String[] types; + + public String getUsage() { + String d=""; + if(type.equals("recharge on roll")) { + System.out.println("roll works"); + if(minimum==6) { + d=" (recharge 6)"; + }else { + d=" (recharge "+minimum+"-6)"; + } + }else if (type.equals("per day")) { + d=" ("+times+"/day)"; + System.out.println("/day works"); + + }else if (type.equals("recharge after rest")) { + if(types.length==1) { + d=" (1/long rest)"; + }else { + d=" (1/long or short rest)"; + } + + System.out.println("/day works"); + + } + + + return d; + } + +} diff --git a/src/main/resources/config.json b/src/main/resources/config.json index c78a4f9d..1db8a20f 100644 --- a/src/main/resources/config.json +++ b/src/main/resources/config.json @@ -1,4 +1,4 @@ { "channels": ["graham"], - "token": "ODQ1NzEyOTc1Mjg5MjUzODg4.YKk9lQ.sZ-1arn6yh34JJUq0hUWBjh0dhI" + "token": "ODQ1NzEyOTc1Mjg5MjUzODg4.YKk9lQ.pExMn-xjPQZ6IU-hVctnlrqiIeU" }