diff --git a/src/main/java/net/tylermurphy/ken/api/Request.java b/src/main/java/net/tylermurphy/ken/api/Request.java index c33e6fd..8daa899 100644 --- a/src/main/java/net/tylermurphy/ken/api/Request.java +++ b/src/main/java/net/tylermurphy/ken/api/Request.java @@ -51,8 +51,7 @@ public abstract class Request { connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod(method.toString()); - connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"); - + connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"); for(int i=0; i+1 ** Searches on rule34\n") .appendDescription("**/gelbooru ** Searches on gelbooru\n") .appendDescription("**/danbooru ** Searches on danbooru\n") + .appendDescription("**/konachan ** Searches on konachan\n") + .appendDescription("**/yandere ** Searches on yande.re\n") .appendDescription("**/e621 ** Searches on e621\n") .appendDescription("**/nhentai ** Searches on nhentai\n") .setFooter("Page "+page+"/"+PAGES) diff --git a/src/main/java/net/tylermurphy/ken/command/nsfw/Konachan.java b/src/main/java/net/tylermurphy/ken/command/nsfw/Konachan.java new file mode 100644 index 0000000..9c7bd65 --- /dev/null +++ b/src/main/java/net/tylermurphy/ken/command/nsfw/Konachan.java @@ -0,0 +1,62 @@ +package net.tylermurphy.ken.command.nsfw; + +import net.dv8tion.jda.api.entities.GuildMessageChannel; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.entities.emoji.Emoji; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.tylermurphy.ken.Ken; +import net.tylermurphy.ken.api.HTTPMethod; +import net.tylermurphy.ken.api.XmlRequest; +import net.tylermurphy.ken.command.Response; +import net.tylermurphy.ken.util.Command; +import net.tylermurphy.ken.util.Option; +import org.json.JSONException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.List; + +public class Konachan { + + @Command(name="konachan",description="Searches for an image off of konachan") + @Option(name="query",description="Search query for konachan",type= OptionType.STRING,required=true) + @Option(name="page",description="Page number for konachan",type= OptionType.INTEGER) + public Response execute(GuildMessageChannel channel, List args){ + if(!(channel instanceof TextChannel)) { + return Response.error("This command can only be used in a text channel"); + } + TextChannel textChannel = (TextChannel) channel; + if(!textChannel.isNSFW()){ + return Response.error("This command can only be used in an NSFW channel"); + } + int page = args.size() > 1 ? (int)args.get(1) : 1; + String url = request((String)args.get(0), page); + if(url == null){ + return Response.error("Unable to find post with search: "+args.get(0)); + } else { + if(url.endsWith(".mp4") || url.endsWith(".webm")) + return Response.success(url); + return Response.success(Ken.getInstance().getDefaultEmbed().setImage(url).build()); + } + } + + private String request(String query, int page) { + Document doc = (Document) new XmlRequest() + .setURL("https://konachan.com/post.xml?limit=100&tags="+query+"&page="+page) + .setType(HTTPMethod.GET) + .request(); + try { + NodeList nList = doc.getElementsByTagName("post"); + int choice = (int) (Math.random() * nList.getLength() - 1); + if (choice < 0) return null; + Node node = nList.item(choice); + Element element = (Element) node; + return element.getAttribute("file_url"); + } catch (JSONException e) { + return null; + } + } + +} diff --git a/src/main/java/net/tylermurphy/ken/command/nsfw/Yandere.java b/src/main/java/net/tylermurphy/ken/command/nsfw/Yandere.java new file mode 100644 index 0000000..1fdad0c --- /dev/null +++ b/src/main/java/net/tylermurphy/ken/command/nsfw/Yandere.java @@ -0,0 +1,61 @@ +package net.tylermurphy.ken.command.nsfw; + +import net.dv8tion.jda.api.entities.GuildMessageChannel; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.tylermurphy.ken.Ken; +import net.tylermurphy.ken.api.HTTPMethod; +import net.tylermurphy.ken.api.XmlRequest; +import net.tylermurphy.ken.command.Response; +import net.tylermurphy.ken.util.Command; +import net.tylermurphy.ken.util.Option; +import org.json.JSONException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.List; + +public class Yandere { + + @Command(name="yandere",description="Searches for an image off of yande.re") + @Option(name="query",description="Search query for yande.re",type= OptionType.STRING,required=true) + @Option(name="page",description="Page number for yande.re",type= OptionType.INTEGER) + public Response execute(GuildMessageChannel channel, List args){ + if(!(channel instanceof TextChannel)) { + return Response.error("This command can only be used in a text channel"); + } + TextChannel textChannel = (TextChannel) channel; + if(!textChannel.isNSFW()){ + return Response.error("This command can only be used in an NSFW channel"); + } + int page = args.size() > 1 ? (int)args.get(1) : 1; + String url = request((String)args.get(0), page); + if(url == null){ + return Response.error("Unable to find post with search: "+args.get(0)); + } else { + if(url.endsWith(".mp4") || url.endsWith(".webm")) + return Response.success(url); + return Response.success(Ken.getInstance().getDefaultEmbed().setImage(url).build()); + } + } + + private String request(String query, int page){ + Document document = (Document) new XmlRequest() + .setURL("https://yande.re/post.xml?limit=100&tags="+query+"&page="+page) + .setType(HTTPMethod.GET) + .request(); + try { + NodeList nList = document.getElementsByTagName("post"); + int choice = (int) (Math.random() * nList.getLength() - 1); + if (choice < 0) return null; + Node node = nList.item(choice); + Element element = (Element) node; + return element.getAttribute("file_url"); + } catch (JSONException e) { + return null; + } + } + +}