Iterative

This commit is contained in:
Matthew Cech
2020-02-09 20:56:10 -08:00
parent c8061770ed
commit de2f3f4515
8 changed files with 206 additions and 24 deletions
+22
View File
@@ -0,0 +1,22 @@
function plugin(message, user)
local index;
local concat;
if(string.find(message, "https://derpicdn.net/img"))then
if(string.find(message, "view/"))then
index = string.find(message, "/[^/]*$");
return "!derpi ID:" .. string.sub(message, index + 1, string.find(message, ".[^.]*$")-1);
else
if(string.find(message, "download/"))then
index = string.find(message, "_");
concat = string.sub(message, 0, index-1);
return "!derpi ID:" .. string.sub(concat, string.find(message, "/[^/]*$") + 1);
else
index = string.find(message, "/[^/]*$");
concat = string.sub(message, 0, index - 1);
index = string.find(concat, "/[^/]*$");
return "!derpi ID:" .. string.sub(concat, index + 1);
end
end
end
end
+8
View File
@@ -0,0 +1,8 @@
function plugin(message, user)
if(string.find(message, "https://static1.e621.net/data") or string.find(message, "https://static1.e926.net/data"))then
if(string.find(message, " "))then
message = string.sub(message, 0, string.find(message, " "));
end
return "!e6 md5:" .. string.sub(message, string.find(message, "/[^/]*$") + 1 ,string.find(message, ".[^.]*$") - 1);
end
end
+72
View File
@@ -0,0 +1,72 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.KittyChannel;
import dataStructures.KittyEmbed;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
import network.NetworkDerpi;
public class CommandDerpi extends Command
{
NetworkDerpi searcher = new NetworkDerpi();
KittyEmbed response;
// Required constructor
public CommandDerpi(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return "Will search derpibooru for the tags entered, if KittyBot's content filter allows it"; }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(guild.contentRating == KittyRating.Filtered)
{
try
{
response = searcher.getDerpi(input.args.replace(',', ' ') + " safe").output();
res.send(response);
}
catch(Exception e)
{
res.send(LocStrings.stub("DerpiError"));
}
}
else
{
if(input.args == null || input.args.length() == 0)
res.send("DerpiNoSearchError");
else
{
response = searcher.getDerpi(input.args).output();
try
{
res.send(response);
}
catch(Exception e)
{
res.send(LocStrings.stub("DerpiError"));
}
}
}
if(input.args.startsWith("ID:"))
{
response = searcher.getDerpiByID(input.args.substring(input.args.indexOf(':'))).output();
try
{
res.send(response);
}
catch(Exception e)
{
res.send(LocStrings.stub("DerpiError"));
}
}
}
}
+60
View File
@@ -0,0 +1,60 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.*;
import network.NetworkE6;
public class CommandE6 extends Command
{
NetworkE6 searcher = new NetworkE6();
KittyEmbed response;
public CommandE6(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText()
{
String toRet = "Will search e6";
toRet += "21 for the tags entered, if KittyBot's content filter allows it";
return toRet;
}
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(guild.contentRating == KittyRating.Filtered || !guild.channels.get(Long.getLong(channel.uniqueID)).mature)
{
if(!guild.channels.get(Long.getLong(channel.uniqueID)).mature)
{
res.send("This channel is SFW only! Have some (probably) wholesome content ^^~");
}
response = searcher.getE6(input.args + " rating:safe").output();
try
{
res.send(response);
}
catch(Exception e)
{
res.send(LocStrings.stub("E6Blacklisted"));
}
}
else
{
if(input.args == null || input.args.length() == 0)
res.send("E6NoSearchError");
else
{
try
{
response = searcher.getE6(input.args).output();
res.send(response);
}
catch(Exception e)
{
res.send(LocStrings.stub("E6Blacklisted"));
}
}
}
}
}
+3
View File
@@ -108,6 +108,9 @@ public class CommandManager
this.register(LocCommands.stub("music"), new CommandMusicMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("defaultdance"), new CommandDefaultDance(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("getsauce"), new CommandGetSauce(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("e6"), new CommandE6(KittyRole.General, KittyRating.Filtered));
this.register(LocCommands.stub("derpi"), new CommandDerpi(KittyRole.General, KittyRating.Filtered));
}
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
+31 -14
View File
@@ -1,40 +1,57 @@
package dataStructures;
// This is a structure representing an image reponse for handing around.
import java.awt.Color;
// This is a structure representing an image response for handing around.
public class GenericImage
{
private String artist;
private String postURL;
private String imageURL;
private KittyEmbed response= new KittyEmbed();
public GenericImage(String artist, String postURL, String imageURL)
{
this.artist = artist;
this.postURL = postURL;
this.imageURL = imageURL;
response.authorText = null;
response.color = new Color(0,0,0);
}
public void editArtist(String artist)
{
this.artist = artist;
response.authorText = artist;
}
public void editAuthorImage(String URL)
{
response.authorImage = URL;
}
public void editPostURL(String postURL)
{
this.postURL = postURL;
response.authorLink = postURL;
}
public void editImageURL(String imageURL)
{
this.imageURL = imageURL;
response.imageURL = imageURL;
}
public String toString()
public void editDescriptionText(String score)
{
if(imageURL.isEmpty())
response.descriptionText = score;
}
public void editFooterText(String tags)
{
return "I couldn't find anything! Please try again!";
response.footerText = tags;
}
return "Artist: " + artist + "\n<" + postURL.trim() + ">\n" + imageURL;
public KittyEmbed output()
{
return response;
}
public boolean isValid()
{
if(response.title != null)
return true;
return false;
}
}
@@ -6,8 +6,8 @@ import offline.Ref;
import utils.*;
/**
* This is the e621 request class, designed for form and parse requests that
* use the e621 API, and is entirely static.
* This is the e6 request class, designed for form and parse requests that
* use the e6 API, and is entirely static.
*
* If you ever find this class randomly not working,
* it may be a good idea to make sure the user agent string is set in
@@ -17,7 +17,7 @@ import utils.*;
* @author Wisp
* Edited by Rin
*/
public class NetworkE621
public class NetworkE6
{
///////////////////////////////////////
// Internal JSON class and variables //
@@ -26,7 +26,7 @@ public class NetworkE621
private static final String API_ROOT = "https://e621.net/post/index.json?";
private static int maxSearchResults_ = 10;
private static String[] blacklist = Ref.e621Blacklist;
private class E621ResponseObject
private class E6ResponseObject
{
// public varaibles matching the case and the type we want for JSON.
// There are many more fields, but if we don't provide some it just
@@ -43,7 +43,7 @@ public class NetworkE621
// Static methods //
////////////////////
// Requests a specific image, then returns a few.
public GenericImage getE621(String input)
public GenericImage getE6(String input)
{
GenericImage image = new GenericImage("","","");
@@ -63,7 +63,7 @@ public class NetworkE621
if(res != null)
{
// Use class evaluation on an array of the response imageObject to be able to hold multiple.
E621ResponseObject[] imageObj = jsonParser_.fromJson(res, E621ResponseObject[].class);
E6ResponseObject[] imageObj = jsonParser_.fromJson(res, E6ResponseObject[].class);
// For now, we really just wanna display images and their source.
// Append them all separately to a response string w/ some flavor text.
+2 -2
View File
@@ -11,7 +11,7 @@ public class NetworkSauceNAO
{
private static final Gson jsonParser_ = new Gson();
private static final String API_ROOT = "https://saucenao.com/search.php?db=999&output_type=2&numres=10&api_key=" + Ref.SauceNAOKey +"&url=";
NetworkE621 e621Sauce = new NetworkE621();
NetworkE6 e6Sauce = new NetworkE6();
private class SauceNAOResponseObject
{
List<SauceNAOResult> results;
@@ -40,7 +40,7 @@ public class NetworkSauceNAO
if(sauceUrl.startsWith("https://e621.net/post/show/"))
{
System.out.println("id:" + sauceUrl.substring(26));
return e621Sauce.getE621("id:" + sauceUrl.substring(27)).toString();
return e6Sauce.getE6("id:" + sauceUrl.substring(27)).toString();
}
return sauce.results.get(0).data.ext_urls[0];
}