Merge branch 'master' into develop
This commit is contained in:
@@ -27,5 +27,6 @@
|
|||||||
<classpathentry kind="lib" path="lib/google-http-client-1.32.0.jar"/>
|
<classpathentry kind="lib" path="lib/google-http-client-1.32.0.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/google-api-services-youtube-v3-rev212-1.25.0.jar"/>
|
<classpathentry kind="lib" path="lib/google-api-services-youtube-v3-rev212-1.25.0.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/LavaPlayerJar-0.0.1-jar-with-dependencies.jar"/>
|
<classpathentry kind="lib" path="lib/LavaPlayerJar-0.0.1-jar-with-dependencies.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/nanohttpd-2.3.1.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@@ -17,6 +17,8 @@
|
|||||||
"Localized Commands","dbstats",""
|
"Localized Commands","dbstats",""
|
||||||
"Localized Commands","defaultdance",""
|
"Localized Commands","defaultdance",""
|
||||||
"Localized Commands","derp",""
|
"Localized Commands","derp",""
|
||||||
|
"Localized Commands","derpi",""
|
||||||
|
"Localized Commands","e6",""
|
||||||
"Localized Commands","e621",""
|
"Localized Commands","e621",""
|
||||||
"Localized Commands","eightball, 8ball",""
|
"Localized Commands","eightball, 8ball",""
|
||||||
"Localized Commands","fetch",""
|
"Localized Commands","fetch",""
|
||||||
@@ -48,6 +50,7 @@
|
|||||||
"Localized Commands","stats",""
|
"Localized Commands","stats",""
|
||||||
"Localized Commands","teey",""
|
"Localized Commands","teey",""
|
||||||
"Localized Commands","tony, stark, dontfeelgood, dontfeelsogood","tony, stark, dontfeelgood, dontfeelsogood, snap"
|
"Localized Commands","tony, stark, dontfeelgood, dontfeelsogood","tony, stark, dontfeelgood, dontfeelsogood, snap"
|
||||||
|
"Localized Commands","tradebeans, trade",""
|
||||||
"Localized Commands","tweet",""
|
"Localized Commands","tweet",""
|
||||||
"Localized Commands","vote",""
|
"Localized Commands","vote",""
|
||||||
"Localized Commands","wolfram",""
|
"Localized Commands","wolfram",""
|
||||||
@@ -110,8 +113,10 @@
|
|||||||
"Localized Strings","DBFlushInfo","Takes all objects queued for the database and writes them to the database, then says how many were written."
|
"Localized Strings","DBFlushInfo","Takes all objects queued for the database and writes them to the database, then says how many were written."
|
||||||
"Localized Strings","DBStatsInfo","Shows current statistics for the database"
|
"Localized Strings","DBStatsInfo","Shows current statistics for the database"
|
||||||
"Localized Strings","DefaultDanceInfo","y'all know forknife, get ready to dance, or make a friend dance with @!"
|
"Localized Strings","DefaultDanceInfo","y'all know forknife, get ready to dance, or make a friend dance with @!"
|
||||||
|
"Localized Strings","DerpiError",""
|
||||||
"Localized Strings","DoWorkFinished","I finished with my work! :D"
|
"Localized Strings","DoWorkFinished","I finished with my work! :D"
|
||||||
"Localized Strings","DoWorkInfo","Occupies a core for a few seconds"
|
"Localized Strings","DoWorkInfo","Occupies a core for a few seconds"
|
||||||
|
"Localized Strings","E6Blacklisted","I can't show that image ;3; (it may be blacklisted)"
|
||||||
"Localized Strings","EightBallError","Hmm? You'll need to ask a question!"
|
"Localized Strings","EightBallError","Hmm? You'll need to ask a question!"
|
||||||
"Localized Strings","EightBallInfo","Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges."
|
"Localized Strings","EightBallInfo","Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges."
|
||||||
"Localized Strings","EightBallMaybe1","Reply hazy, try again."
|
"Localized Strings","EightBallMaybe1","Reply hazy, try again."
|
||||||
@@ -182,7 +187,11 @@
|
|||||||
"Localized Strings","MapVersion","Using mapgen v0.1"
|
"Localized Strings","MapVersion","Using mapgen v0.1"
|
||||||
"Localized Strings","MapWidth",""
|
"Localized Strings","MapWidth",""
|
||||||
"Localized Strings","ModInfo","Mod is a super command for admin or mod use only!\n\t`mod ban @user` will ban a user from the server\n\t`mod kick @user` will kick the user from the server"
|
"Localized Strings","ModInfo","Mod is a super command for admin or mod use only!\n\t`mod ban @user` will ban a user from the server\n\t`mod kick @user` will kick the user from the server"
|
||||||
|
"Localized Strings","MusicAddTrack",""
|
||||||
"Localized Strings","MusicInfo",""
|
"Localized Strings","MusicInfo",""
|
||||||
|
"Localized Strings","MusicVolChanged","Volume set to %s!"
|
||||||
|
"Localized Strings","MusicVolCurrent","Volume is at %s!"
|
||||||
|
"Localized Strings","MusicVolOOB",""
|
||||||
"Localized Strings","PerishInfo","Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned"
|
"Localized Strings","PerishInfo","Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned"
|
||||||
"Localized Strings","PingInfo","Will respond with Pong!"
|
"Localized Strings","PingInfo","Will respond with Pong!"
|
||||||
"Localized Strings","PingResponse","Pong!"
|
"Localized Strings","PingResponse","Pong!"
|
||||||
@@ -271,6 +280,8 @@
|
|||||||
"Command Enabler","dbstats","1"
|
"Command Enabler","dbstats","1"
|
||||||
"Command Enabler","defaultdance","1"
|
"Command Enabler","defaultdance","1"
|
||||||
"Command Enabler","derp","1"
|
"Command Enabler","derp","1"
|
||||||
|
"Command Enabler","derpi","1"
|
||||||
|
"Command Enabler","e6","1"
|
||||||
"Command Enabler","e621","1"
|
"Command Enabler","e621","1"
|
||||||
"Command Enabler","eightball, 8ball","1"
|
"Command Enabler","eightball, 8ball","1"
|
||||||
"Command Enabler","fetch","1"
|
"Command Enabler","fetch","1"
|
||||||
@@ -313,6 +324,7 @@
|
|||||||
"Command Enabler","stats","1"
|
"Command Enabler","stats","1"
|
||||||
"Command Enabler","teey","1"
|
"Command Enabler","teey","1"
|
||||||
"Command Enabler","tony, stark, dontfeelgood, dontfeelsogood","1"
|
"Command Enabler","tony, stark, dontfeelgood, dontfeelsogood","1"
|
||||||
|
"Command Enabler","tradebeans, trade","1"
|
||||||
"Command Enabler","tweet","1"
|
"Command Enabler","tweet","1"
|
||||||
"Command Enabler","vote","1"
|
"Command Enabler","vote","1"
|
||||||
"Command Enabler","wolfram","1"
|
"Command Enabler","wolfram","1"
|
||||||
|
|||||||
|
Binary file not shown.
@@ -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
|
||||||
@@ -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
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
@@ -1,8 +1,23 @@
|
|||||||
package commands.general;
|
package commands.general;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
|
import core.Constants;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
import dataStructures.*;
|
import dataStructures.KittyChannel;
|
||||||
|
import dataStructures.KittyGuild;
|
||||||
|
import dataStructures.KittyRating;
|
||||||
|
import dataStructures.KittyRole;
|
||||||
|
import dataStructures.KittyUser;
|
||||||
|
import dataStructures.Response;
|
||||||
|
import dataStructures.UserInput;
|
||||||
|
|
||||||
public class CommandBeansShow extends Command
|
public class CommandBeansShow extends Command
|
||||||
{
|
{
|
||||||
@@ -15,7 +30,15 @@ public class CommandBeansShow extends Command
|
|||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
{
|
{
|
||||||
if(input.mentions == null)
|
if(input.mentions == null)
|
||||||
res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.getBeans()));
|
{
|
||||||
|
res.send("" + user.getBeans());
|
||||||
|
try {
|
||||||
|
res.sendFile(combineImages(user.getBeans()), "png");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.getBeans()));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String mentionedBeans = "";
|
String mentionedBeans = "";
|
||||||
@@ -26,4 +49,75 @@ public class CommandBeansShow extends Command
|
|||||||
res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans));
|
res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File combineImages(long beans) throws IOException
|
||||||
|
{
|
||||||
|
// Acquire images
|
||||||
|
BufferedImage imageBase = ImageIO.read(new File(Constants.AssetDirectory + "beans/BeansBG.png"));
|
||||||
|
BufferedImage thouBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/thouBean.png"));
|
||||||
|
BufferedImage hunBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/hunBean.png"));
|
||||||
|
BufferedImage tenBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/tenBean.png"));
|
||||||
|
BufferedImage oneBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/oneBean.png"));
|
||||||
|
|
||||||
|
final int baseWidth = imageBase.getWidth();
|
||||||
|
final int baseHeight = imageBase.getHeight();
|
||||||
|
|
||||||
|
long calcBean = beans;
|
||||||
|
|
||||||
|
System.out.println("BEANS: " + beans);
|
||||||
|
|
||||||
|
long thousands = beans / 1000;
|
||||||
|
calcBean = beans % 1000;
|
||||||
|
long hundreds = (calcBean / 100);
|
||||||
|
calcBean = calcBean % 100;
|
||||||
|
long tens = (calcBean / 10);
|
||||||
|
calcBean = calcBean % 10;
|
||||||
|
long ones = calcBean;
|
||||||
|
|
||||||
|
BufferedImage beanImage = new BufferedImage(baseWidth, baseHeight, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics beanGraphics = beanImage.getGraphics();
|
||||||
|
|
||||||
|
for(int i = 0; i < ones; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - oneBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - oneBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(oneBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < tens; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - tenBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - tenBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(tenBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < hundreds; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - hunBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - hunBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(hunBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < thousands; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - thouBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - thouBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(thouBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
Font font = null;
|
||||||
|
font = Font.createFont(Font.TRUETYPE_FONT, new File(Constants.AssetDirectory +"fonts/B612Mono-Regular.ttf"));
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Font beanFont = new Font("font", Font.BOLD, 45);
|
||||||
|
beanGraphics.setFont(beanFont);
|
||||||
|
beanGraphics.drawString("YOU GOT " + beans + " BEANS", 0, baseHeight / 2);
|
||||||
|
|
||||||
|
ImageIO.write(beanImage, "PNG", new File("beanImage.png"));
|
||||||
|
return new File("beanImage.png");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class CommandBetBeans extends Command
|
|||||||
{
|
{
|
||||||
String call = "";
|
String call = "";
|
||||||
|
|
||||||
int min = 50;
|
int min = 20;
|
||||||
int bet = 0;
|
int bet = 0;
|
||||||
int win = 0;
|
int win = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -68,22 +68,23 @@ public class CommandBoop extends Command
|
|||||||
{
|
{
|
||||||
if(input.mentions == null)
|
if(input.mentions == null)
|
||||||
{
|
{
|
||||||
|
// No one is booped, just the bot!
|
||||||
boopTracker.applyBoop();
|
boopTracker.applyBoop();
|
||||||
res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.howMany()));
|
res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.howMany()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// When someone boops one other person
|
||||||
if(input.mentions.length == 1)
|
if(input.mentions.length == 1)
|
||||||
{
|
{
|
||||||
boopTracker.applyBoop();
|
|
||||||
res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name));
|
res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A number of people have been booped
|
||||||
String booped = "";
|
String booped = "";
|
||||||
for(int i = 0; i < input.mentions.length; i++)
|
for(int i = 0; i < input.mentions.length; i++)
|
||||||
{
|
{
|
||||||
boopTracker.applyBoop();
|
|
||||||
if(i < input.mentions.length-1)
|
if(i < input.mentions.length-1)
|
||||||
booped += input.mentions[i].name + ", ";
|
booped += input.mentions[i].name + ", ";
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class CommandColor extends Command
|
|||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
{
|
{
|
||||||
// First, try and parse out the color to make sure we can even get it.
|
// First, try and parse out the color to make sure we can even get it.
|
||||||
ColorData colorData = theColorAPI.lookupHex(input.args.trim());
|
ColorData colorData = theColorAPI.lookupHex(input.args);
|
||||||
|
|
||||||
// Verify the color was even found
|
// Verify the color was even found
|
||||||
if(colorData == null)
|
if(colorData == null)
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
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;
|
||||||
|
GenericImage image;
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
image = searcher.getE6(input.args + " rating:safe");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = image.output();
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("E6Blacklisted"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(response.bodyImageURL == null)
|
||||||
|
{
|
||||||
|
Exception e = new Exception();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,13 +27,22 @@ public class CommandTradeBeans extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
int beans = 0;
|
int beans = 0;
|
||||||
try {
|
|
||||||
|
try
|
||||||
|
{
|
||||||
beans = Integer.parseInt(input.args.split(" ")[0]);
|
beans = Integer.parseInt(input.args.split(" ")[0]);
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
res.send(LocStrings.stub("TradeBeansIntParseError"));
|
try
|
||||||
return;
|
{
|
||||||
|
beans = Integer.parseInt(input.args.split(" ")[1]);
|
||||||
|
}
|
||||||
|
catch(Exception eInner)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("TradeBeansIntParseError"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(user.getBeans() < beans)
|
if(user.getBeans() < beans)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class CommandMusicMain extends Command
|
|||||||
framework.addCommand("skip", new SubCommandSkip(KittyRole.General, KittyRating.Safe));
|
framework.addCommand("skip", new SubCommandSkip(KittyRole.General, KittyRating.Safe));
|
||||||
framework.addCommand("stop", new SubCommandStop(KittyRole.General, KittyRating.Safe));
|
framework.addCommand("stop", new SubCommandStop(KittyRole.General, KittyRating.Safe));
|
||||||
framework.addCommand("playlist", new SubCommandPlaylist(KittyRole.General, KittyRating.Safe));
|
framework.addCommand("playlist", new SubCommandPlaylist(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("volume", new SubCommandVolume(KittyRole.General, KittyRating.Safe));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package commands.music;
|
package commands.music;
|
||||||
|
|
||||||
|
import core.LocStrings;
|
||||||
import core.SubCommand;
|
import core.SubCommand;
|
||||||
import core.SubCommandFormattable;
|
import core.SubCommandFormattable;
|
||||||
import dataStructures.KittyChannel;
|
import dataStructures.KittyChannel;
|
||||||
@@ -27,6 +28,6 @@ public class SubCommandAddTrack extends SubCommand
|
|||||||
video = YT.getYT(video);
|
video = YT.getYT(video);
|
||||||
}
|
}
|
||||||
guild.audio.playVideo(video);
|
guild.audio.playVideo(video);
|
||||||
return new SubCommandFormattable(video);
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicAddTrack"), video));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package commands.music;
|
||||||
|
|
||||||
|
import core.LocStrings;
|
||||||
|
import core.SubCommand;
|
||||||
|
import core.SubCommandFormattable;
|
||||||
|
import dataStructures.KittyChannel;
|
||||||
|
import dataStructures.KittyGuild;
|
||||||
|
import dataStructures.KittyRating;
|
||||||
|
import dataStructures.KittyRole;
|
||||||
|
import dataStructures.KittyUser;
|
||||||
|
import dataStructures.UserInput;
|
||||||
|
|
||||||
|
public class SubCommandVolume extends SubCommand
|
||||||
|
{
|
||||||
|
public SubCommandVolume(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||||
|
{
|
||||||
|
int newVol = guild.audio.getVolume(guild.audio.player);
|
||||||
|
if(input.args != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newVol = Integer.parseInt(input.args);
|
||||||
|
if(newVol > 100 || newVol <1)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolOOB")));
|
||||||
|
}
|
||||||
|
guild.audio.changeVolume(guild.audio.player, newVol);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolCurrent"), newVol));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolChanged"), newVol));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -108,6 +108,10 @@ public class CommandManager
|
|||||||
this.register(LocCommands.stub("music"), new CommandMusicMain(KittyRole.General, KittyRating.Safe));
|
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("defaultdance"), new CommandDefaultDance(KittyRole.General, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("getsauce"), new CommandGetSauce(KittyRole.General, KittyRating.Safe));
|
this.register(LocCommands.stub("getsauce"), new CommandGetSauce(KittyRole.General, KittyRating.Safe));
|
||||||
|
this.register(LocCommands.stub("tradebeans, trade"), new CommandTradeBeans(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)
|
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
|
||||||
|
|||||||
@@ -142,8 +142,10 @@ public class ObjectBuilderFactory
|
|||||||
|
|
||||||
List<Emote> emotes = event.getGuild().getEmotes();
|
List<Emote> emotes = event.getGuild().getEmotes();
|
||||||
ArrayList<String> emotesString = new ArrayList<String>();
|
ArrayList<String> emotesString = new ArrayList<String>();
|
||||||
|
HashMap<Long, KittyChannel> channels = new HashMap<Long, KittyChannel>();
|
||||||
String emote;
|
String emote;
|
||||||
String emoteFix;
|
String emoteFix;
|
||||||
|
channels.put(Long.getLong(uid), extractChannel(event));
|
||||||
for(int i = 0; i < emotes.size(); i++)
|
for(int i = 0; i < emotes.size(); i++)
|
||||||
{
|
{
|
||||||
emote = emotes.get(i).toString();
|
emote = emotes.get(i).toString();
|
||||||
@@ -165,7 +167,7 @@ public class ObjectBuilderFactory
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Construct a new guild with defaults
|
// Construct a new guild with defaults
|
||||||
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager));
|
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager), channels);
|
||||||
DatabaseManager.instance.globalRegister(guild);
|
DatabaseManager.instance.globalRegister(guild);
|
||||||
guildCache.put(uid, guild);
|
guildCache.put(uid, guild);
|
||||||
}
|
}
|
||||||
@@ -223,14 +225,13 @@ public class ObjectBuilderFactory
|
|||||||
public static KittyChannel extractChannel(GuildMessageReceivedEvent event)
|
public static KittyChannel extractChannel(GuildMessageReceivedEvent event)
|
||||||
{
|
{
|
||||||
lazyInit();
|
lazyInit();
|
||||||
|
|
||||||
String channelID = event.getChannel().getId();
|
String channelID = event.getChannel().getId();
|
||||||
String guildID = event.getGuild().getId();
|
|
||||||
KittyChannel channel = null;
|
KittyChannel channel = null;
|
||||||
|
|
||||||
synchronized(channelCache)
|
synchronized(channelCache)
|
||||||
{
|
{
|
||||||
KittyChannel cachedChannel = channelCache.get(channelID);
|
KittyChannel cachedChannel = channelCache.get(channelID);
|
||||||
|
boolean mature;
|
||||||
|
|
||||||
if(cachedChannel != null)
|
if(cachedChannel != null)
|
||||||
{
|
{
|
||||||
@@ -238,8 +239,8 @@ public class ObjectBuilderFactory
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
KittyGuild cachedGuild = guildCache.get(guildID);
|
mature = event.getChannel().isNSFW();
|
||||||
channel = new KittyChannel(channelID, cachedGuild);
|
channel = new KittyChannel(channelID, mature);
|
||||||
channelCache.put(channelID, channel);
|
channelCache.put(channelID, channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -386,7 +387,7 @@ public class ObjectBuilderFactory
|
|||||||
// Determine token based on config. Default to test token.
|
// Determine token based on config. Default to test token.
|
||||||
String tokenToUse = Ref.TestToken;
|
String tokenToUse = Ref.TestToken;
|
||||||
if(ConfigGlobals.getStartupMode() == KittyStartupMode.Release)
|
if(ConfigGlobals.getStartupMode() == KittyStartupMode.Release)
|
||||||
tokenToUse = Ref.Token;
|
tokenToUse = Ref.PoguToken;
|
||||||
|
|
||||||
// Construct bot based on token
|
// Construct bot based on token
|
||||||
kitty = new JDABuilder(AccountType.BOT)
|
kitty = new JDABuilder(AccountType.BOT)
|
||||||
|
|||||||
@@ -1,40 +1,57 @@
|
|||||||
package dataStructures;
|
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
|
public class GenericImage
|
||||||
{
|
{
|
||||||
private String artist;
|
private KittyEmbed response= new KittyEmbed();
|
||||||
private String postURL;
|
|
||||||
private String imageURL;
|
|
||||||
|
|
||||||
public GenericImage(String artist, String postURL, String imageURL)
|
public GenericImage(String artist, String postURL, String imageURL)
|
||||||
{
|
{
|
||||||
this.artist = artist;
|
response.authorText = null;
|
||||||
this.postURL = postURL;
|
response.color = new Color(0,0,0);
|
||||||
this.imageURL = imageURL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editArtist(String artist)
|
public void editArtist(String artist)
|
||||||
{
|
{
|
||||||
this.artist = artist;
|
response.authorText = artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editAuthorImage(String URL)
|
||||||
|
{
|
||||||
|
response.authorImage = URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editPostURL(String postURL)
|
public void editPostURL(String postURL)
|
||||||
{
|
{
|
||||||
this.postURL = postURL;
|
response.authorLink = postURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editImageURL(String imageURL)
|
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;
|
||||||
{
|
}
|
||||||
return "I couldn't find anything! Please try again!";
|
|
||||||
}
|
public void editFooterText(String tags)
|
||||||
return "Artist: " + artist + "\n<" + postURL.trim() + ">\n" + imageURL;
|
{
|
||||||
|
response.footerText = tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KittyEmbed output()
|
||||||
|
{
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid()
|
||||||
|
{
|
||||||
|
if(response.title != null)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,15 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
//import core.DatabaseTrackedObject;
|
|
||||||
|
|
||||||
public class KittyChannel //extends DatabaseTrackedObject
|
public class KittyChannel
|
||||||
{
|
{
|
||||||
public String uniqueID;
|
public String uniqueID;
|
||||||
public KittyGuild guild;
|
public boolean mature;
|
||||||
|
|
||||||
//public KittyRating rating;
|
public KittyChannel(String uniqueID, boolean mature)
|
||||||
//public bool isVoice;
|
|
||||||
|
|
||||||
public KittyChannel(String uniqueID, KittyGuild guild)
|
|
||||||
{
|
{
|
||||||
//super(uniqueID);
|
//super(uniqueID);
|
||||||
this.uniqueID = uniqueID;
|
this.uniqueID = uniqueID;
|
||||||
this.guild = guild;
|
this.mature = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public String serialize()
|
|
||||||
// {
|
|
||||||
// return "";
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void deSerialzie(String string)
|
|
||||||
// {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import core.DatabaseManager;
|
import core.DatabaseManager;
|
||||||
import core.DatabaseTrackedObject;
|
import core.DatabaseTrackedObject;
|
||||||
@@ -21,6 +22,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
public ArrayList<String> hasVoted = new ArrayList<String>();
|
public ArrayList<String> hasVoted = new ArrayList<String>();
|
||||||
public ArrayList<String> emoji = new ArrayList<String>();
|
public ArrayList<String> emoji = new ArrayList<String>();
|
||||||
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
|
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
|
||||||
|
public HashMap <Long, KittyChannel> channels;
|
||||||
public AdminControl control;
|
public AdminControl control;
|
||||||
public AudioUtils audio;
|
public AudioUtils audio;
|
||||||
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
|
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
|
||||||
@@ -42,7 +44,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default content for a guild
|
// Default content for a guild
|
||||||
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio)
|
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||||
{
|
{
|
||||||
|
|
||||||
super(uniqueID);
|
super(uniqueID);
|
||||||
@@ -56,11 +58,12 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
this.polling = false;
|
this.polling = false;
|
||||||
this.emoji = emoji;
|
this.emoji = emoji;
|
||||||
this.audio = audio;
|
this.audio = audio;
|
||||||
|
this.channels = channels;
|
||||||
setCommandIndicator("!");
|
setCommandIndicator("!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit constructor
|
// Explicit constructor
|
||||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID, AudioUtils audio)
|
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||||
{
|
{
|
||||||
super(uniqueID);
|
super(uniqueID);
|
||||||
this.uniqueID = uniqueID;
|
this.uniqueID = uniqueID;
|
||||||
@@ -73,6 +76,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
this.polling = false;
|
this.polling = false;
|
||||||
this.guildOwner = guildOwner;
|
this.guildOwner = guildOwner;
|
||||||
this.audio = audio;
|
this.audio = audio;
|
||||||
|
this.channels = channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String startPoll(String poll)
|
public String startPoll(String poll)
|
||||||
@@ -126,7 +130,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
{
|
{
|
||||||
if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.getBeans() > raffleCost && raffling)
|
if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.getBeans() > raffleCost && raffling)
|
||||||
{
|
{
|
||||||
user.changeBeans(raffleCost);
|
user.changeBeans(-raffleCost);
|
||||||
raffleUsersUnchosen.add(user);
|
raffleUsersUnchosen.add(user);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,40 @@ public class NetworkColiru
|
|||||||
{
|
{
|
||||||
public String compileCPlusPlus(String query)
|
public String compileCPlusPlus(String query)
|
||||||
{
|
{
|
||||||
// Escape characters that need escaping.
|
// Escape characters that need escaping - mostly whitespace.
|
||||||
// Primarily types of whitespace.
|
|
||||||
query = query.replace("\\n", "\\\\n");
|
query = query.replace("\\n", "\\\\n");
|
||||||
query = query.replace("\\t", "\\\\t");
|
query = query.replace("\\t", "\\\\t");
|
||||||
query = query.replace("\n", "\\n");
|
query = query.replace("\n", "\\n");
|
||||||
query = query.replace("\"", "\\\"");
|
query = query.replace("\"", "\\\"");
|
||||||
query = query.replace("\t", "\\t");
|
query = query.replace("\t", "\\t");
|
||||||
|
query = query.replace("`", "");
|
||||||
|
|
||||||
|
// // replace backticks on only the edges of the string.
|
||||||
|
// StringBuilder s = new StringBuilder(query);
|
||||||
|
//
|
||||||
|
// for(int i = 0; i < s.length(); ++i)
|
||||||
|
// {
|
||||||
|
// if(s.charAt(i) != '`')
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// s.setCharAt(i, ' ');
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for(int i = s.length() - 1; i >= 0; --i)
|
||||||
|
// {
|
||||||
|
// if(s.charAt(i) != '`')
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// s.setCharAt(i, ' ');
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// query = s.toString().trim();
|
||||||
|
|
||||||
|
// Determine if the query is effectively empty or not. If it is, don't attempt to compile it.
|
||||||
|
if(query.trim().length() == 0)
|
||||||
|
{
|
||||||
|
return "I can't compile nothing!";
|
||||||
|
}
|
||||||
|
|
||||||
// Send the compilation request!
|
// Send the compilation request!
|
||||||
String result = HTTPUtils.sendPOSTRequest("http://coliru.stacked-crooked.com/compile"
|
String result = HTTPUtils.sendPOSTRequest("http://coliru.stacked-crooked.com/compile"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class NetworkDerpi
|
|||||||
{
|
{
|
||||||
public String image;
|
public String image;
|
||||||
public String tags;
|
public String tags;
|
||||||
|
public String score;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InitialRequest
|
private class InitialRequest
|
||||||
@@ -29,16 +30,26 @@ public class NetworkDerpi
|
|||||||
String res = HTTPUtils.sendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey);
|
String res = HTTPUtils.sendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey);
|
||||||
if(res != null)
|
if(res != null)
|
||||||
{
|
{
|
||||||
|
InitialRequest obj;
|
||||||
// Use class evaluation on an array of the response object to be able to hold multiple.
|
// Use class evaluation on an array of the response object to be able to hold multiple.
|
||||||
InitialRequest obj = jsonParser_.fromJson(res, InitialRequest.class);
|
try
|
||||||
|
{
|
||||||
|
obj = jsonParser_.fromJson(res, InitialRequest.class);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if(res != null)
|
if(res != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
String res2 = HTTPUtils.sendGETRequest("https://derpibooru.org/" + obj.id + ".json");
|
String res2 = HTTPUtils.sendGETRequest("https://derpibooru.org/" + obj.id + ".json");
|
||||||
image.editPostURL("<https://derpibooru.org/" + obj.id +">");
|
image.editPostURL("https://derpibooru.org/" + obj.id);
|
||||||
DerpiResponseObject imageObj = jsonParser_.fromJson(res2, DerpiResponseObject.class);
|
DerpiResponseObject imageObj = jsonParser_.fromJson(res2, DerpiResponseObject.class);
|
||||||
|
|
||||||
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) + imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) +
|
||||||
|
imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
||||||
if(imageObj.tags.contains("artist:"))
|
if(imageObj.tags.contains("artist:"))
|
||||||
{
|
{
|
||||||
String [] sepTags = imageObj.tags.split(",");
|
String [] sepTags = imageObj.tags.split(",");
|
||||||
@@ -54,8 +65,20 @@ public class NetworkDerpi
|
|||||||
artists += sepTags[i].substring(sepTags[i].indexOf(":")+1);
|
artists += sepTags[i].substring(sepTags[i].indexOf(":")+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
image.editAuthorImage("https://derpicdn.net/favicon.ico");
|
||||||
|
|
||||||
image.editArtist(artists);
|
image.editArtist(artists);
|
||||||
|
String tags = "";
|
||||||
|
for(int i = 0; i < sepTags.length && i < 15; i++)
|
||||||
|
{
|
||||||
|
if(!sepTags[i].contains("artist:"))
|
||||||
|
{
|
||||||
|
tags += sepTags[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image.editFooterText("[Tags]" + tags);
|
||||||
|
image.editDescriptionText("Score: " + imageObj.score);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -66,4 +89,46 @@ public class NetworkDerpi
|
|||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GenericImage getDerpiByID(String id)
|
||||||
|
{
|
||||||
|
GenericImage image = new GenericImage(" ", " ", " ");
|
||||||
|
String artists = "";
|
||||||
|
image.editAuthorImage("https://derpicdn.net/favicon.ico");
|
||||||
|
String res;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res = HTTPUtils.sendGETRequest("https://derpibooru.org/" + id + ".json");
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
DerpiResponseObject imageObj = jsonParser_.fromJson(res, DerpiResponseObject.class);
|
||||||
|
if(imageObj.tags.contains("artist:"))
|
||||||
|
{
|
||||||
|
String [] sepTags = imageObj.tags.split(",");
|
||||||
|
for(int i = 0; i < sepTags.length; i++)
|
||||||
|
{
|
||||||
|
if(sepTags[i].contains("artist:"))
|
||||||
|
{
|
||||||
|
if(!artists.equals(""))
|
||||||
|
{
|
||||||
|
artists += " and ";
|
||||||
|
}
|
||||||
|
artists += sepTags[i].substring(sepTags[i].indexOf(":")+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(artists != "")
|
||||||
|
image.editArtist(artists);
|
||||||
|
else
|
||||||
|
image.editArtist("Artist Unknown!");
|
||||||
|
|
||||||
|
image.editFooterText("[Tags]" + imageObj.tags);
|
||||||
|
image.editDescriptionText("Score: " + imageObj.score);
|
||||||
|
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) +
|
||||||
|
imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
||||||
|
return image;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
package network;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import dataStructures.GenericImage;
|
||||||
|
import offline.Ref;
|
||||||
|
import utils.HTTPUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the e621 request class, designed for form and parse requests that
|
||||||
|
* use the e621 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
|
||||||
|
* HTTPUtils to something other than a browser emulating string, or the default
|
||||||
|
* java one.
|
||||||
|
*
|
||||||
|
* @author Wisp
|
||||||
|
* Edited by Rin
|
||||||
|
*/
|
||||||
|
public class NetworkE6
|
||||||
|
{
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Internal JSON class and variables //
|
||||||
|
//////////////////////////////////.////
|
||||||
|
private static final Gson jsonParser_ = new Gson();
|
||||||
|
private static final String API_ROOT = "https://e621.net/posts.json?";
|
||||||
|
private static int maxSearchResults_ = 10;
|
||||||
|
private static String[] blacklist = Ref.e621Blacklist;
|
||||||
|
|
||||||
|
private class E6ResponseObject
|
||||||
|
{
|
||||||
|
// public variables matching the case and the type we want for JSON.
|
||||||
|
// There are many more fields, but if we don't provide some it just
|
||||||
|
// doesn't bother parsing them.
|
||||||
|
public E6ResponseObjectPost [] posts;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class E6ResponseObjectPost
|
||||||
|
{
|
||||||
|
public String id;
|
||||||
|
public String [] sources;
|
||||||
|
public String[] pools;
|
||||||
|
public String rating;
|
||||||
|
public E6ResponseObjectFile file;
|
||||||
|
public E6ResponseObjectScore score;
|
||||||
|
public E6ResponseObjectTags tags;
|
||||||
|
public E6ResponseObjectRelationships relationships;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class E6ResponseObjectFile
|
||||||
|
{
|
||||||
|
public String url;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class E6ResponseObjectScore
|
||||||
|
{
|
||||||
|
public String total;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class E6ResponseObjectTags
|
||||||
|
{
|
||||||
|
public String[] general;
|
||||||
|
public String[] artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class E6ResponseObjectRelationships
|
||||||
|
{
|
||||||
|
public String has_children;
|
||||||
|
public String[] children;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
// Static methods //
|
||||||
|
////////////////////
|
||||||
|
// Requests a specific image, then returns a few.
|
||||||
|
public GenericImage getE6(String input)
|
||||||
|
{
|
||||||
|
GenericImage image = new GenericImage("","","");
|
||||||
|
boolean blacklisted;
|
||||||
|
// Clean up request and replace problematic characters for the query string.
|
||||||
|
input = input.trim();
|
||||||
|
input = input.replace("+", "%2B");
|
||||||
|
input = input.replace(" ", "%20");
|
||||||
|
|
||||||
|
// Configure and send request. Note: Random ordering added as first
|
||||||
|
// tag by default. User-provided tags, therefore, will override it.
|
||||||
|
// If order:score is provided, that will be honored over order:random.
|
||||||
|
String res = HTTPUtils.sendGETRequest(API_ROOT + "tags=order:random%20" + input + "&limit=" + maxSearchResults_);
|
||||||
|
|
||||||
|
if(res != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Use class evaluation on an array of the response imageObject to be able to hold multiple.
|
||||||
|
System.out.println("Still");
|
||||||
|
E6ResponseObject imageObj = jsonParser_.fromJson(res, E6ResponseObject.class);
|
||||||
|
System.out.println("Broken");
|
||||||
|
// For now, we really just wanna display images and their source.
|
||||||
|
// Append them all separately to a response string w/ some flavor text.
|
||||||
|
if(imageObj.posts.length < 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int i = 0; i < imageObj.posts.length; ++i)
|
||||||
|
{
|
||||||
|
String [] TagsList = imageObj.posts[i].tags.general;
|
||||||
|
blacklisted = false;
|
||||||
|
for(int j = 0; j < blacklist.length; j++)
|
||||||
|
{
|
||||||
|
for(int k = 0; k < TagsList.length; k ++)
|
||||||
|
{
|
||||||
|
if(TagsList[k].equals(blacklist[j]))
|
||||||
|
{
|
||||||
|
System.out.println("BLACKLISTED " + blacklist[j]);
|
||||||
|
blacklisted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(blacklisted)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// We will always have a file URL. That's a given.
|
||||||
|
image.editImageURL(imageObj.posts[i].file.url);
|
||||||
|
image.editPostURL("https://e621.net/posts/" + imageObj.posts[i].id);
|
||||||
|
if(imageObj.posts[i].tags.artist.length > 0)
|
||||||
|
{
|
||||||
|
String artists = "";
|
||||||
|
for(int j = 0; j < imageObj.posts[i].tags.artist.length; j++)
|
||||||
|
artists += imageObj.posts[i].tags.artist[j];
|
||||||
|
image.editArtist(artists);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
image.editArtist("Artist Not Found!");
|
||||||
|
|
||||||
|
image.editAuthorImage("https://e621.net/favicon.ico");
|
||||||
|
|
||||||
|
String sources = "";
|
||||||
|
|
||||||
|
if(imageObj.posts[i].sources != null)
|
||||||
|
{
|
||||||
|
for(int k = 0; k < imageObj.posts[i].sources.length; k ++)
|
||||||
|
{
|
||||||
|
if(!imageObj.posts[i].sources[k].endsWith(imageObj.posts[i].file.url.substring(imageObj.posts[i].file.url.lastIndexOf('.'))))
|
||||||
|
{
|
||||||
|
String source = imageObj.posts[i].sources[k];
|
||||||
|
if(source.contains("//www."))
|
||||||
|
{
|
||||||
|
source = source.substring(source.indexOf(".") + 1);
|
||||||
|
source = source.substring(0, source.indexOf('.'));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
source = source.substring(source.indexOf("/") + 2);
|
||||||
|
source = source.substring(0, source.indexOf('.'));
|
||||||
|
}
|
||||||
|
sources += " [" + source + "](" + imageObj.posts[i].sources[k] + ") ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
image.editDescriptionText("Score: " + imageObj.posts[i].score.total + "\n**Source:**" + sources);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image.editDescriptionText("Score: " + imageObj.posts[i].score.total);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String descTags = "";
|
||||||
|
if(imageObj.posts[i].tags.general.length > 15)
|
||||||
|
{
|
||||||
|
for(int o = 0; o < 15; o++)
|
||||||
|
{
|
||||||
|
descTags += imageObj.posts[i].tags.general[o] + ", ";
|
||||||
|
}
|
||||||
|
image.editFooterText("[Tags] " + descTags + " etc.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
descTags = imageObj.posts[i].tags.general.toString();
|
||||||
|
image.editFooterText("[Tags] " + descTags);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(image.output().authorText != null)
|
||||||
|
{
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
package network;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import dataStructures.GenericImage;
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* HTTPUtils to something other than a browser emulating string, or the default
|
|
||||||
* java one.
|
|
||||||
*
|
|
||||||
* @author Wisp
|
|
||||||
* Edited by Rin
|
|
||||||
*/
|
|
||||||
public class NetworkE621
|
|
||||||
{
|
|
||||||
///////////////////////////////////////
|
|
||||||
// Internal JSON class and variables //
|
|
||||||
//////////////////////////////////.////
|
|
||||||
private static final Gson jsonParser_ = new Gson();
|
|
||||||
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
|
|
||||||
{
|
|
||||||
// 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
|
|
||||||
// doesn't bother parsing them.
|
|
||||||
public String file_url;
|
|
||||||
public String id;
|
|
||||||
public String tags;
|
|
||||||
public String [] artist;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////
|
|
||||||
// Static methods //
|
|
||||||
////////////////////
|
|
||||||
// Requests a specific image, then returns a few.
|
|
||||||
public GenericImage getE621(String input)
|
|
||||||
{
|
|
||||||
|
|
||||||
GenericImage image = new GenericImage("","","");
|
|
||||||
boolean blacklisted;
|
|
||||||
// Clean up request and replace problematic characters for the query string.
|
|
||||||
input = input.trim();
|
|
||||||
input = input.replace("+", "%2B");
|
|
||||||
input = input.replace(" ", "%20");
|
|
||||||
|
|
||||||
// Configure and send request. Note: Random ordering added as first
|
|
||||||
// tag by default. User-provided tags, therefore, will override it.
|
|
||||||
// If order:score is provided, that will be honored over order:random.
|
|
||||||
String res = HTTPUtils.sendPOSTRequest(API_ROOT
|
|
||||||
, "tags=order:random%20" + input + "&limit=" + maxSearchResults_);
|
|
||||||
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// For now, we really just wanna display images and their source.
|
|
||||||
// Append them all separately to a response string w/ some flavor text.
|
|
||||||
if(imageObj.length < 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(int i = 0; i < imageObj.length; ++i)
|
|
||||||
{
|
|
||||||
blacklisted = false;
|
|
||||||
for(int j = 0; j < blacklist.length; j++)
|
|
||||||
{
|
|
||||||
if(imageObj[i].tags.contains(blacklist[j]))
|
|
||||||
{
|
|
||||||
blacklisted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(blacklisted)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// We will always have a file URL. That's a given.
|
|
||||||
image.editImageURL(imageObj[i].file_url);
|
|
||||||
image.editPostURL("https://e621.net/post/show/" + imageObj[i].id);
|
|
||||||
if(imageObj[i].artist.length > 0)
|
|
||||||
image.editArtist(imageObj[i].artist[0]);
|
|
||||||
else
|
|
||||||
image.editArtist("Artist Not Found!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,8 +10,8 @@ import utils.HTTPUtils;
|
|||||||
public class NetworkSauceNAO
|
public class NetworkSauceNAO
|
||||||
{
|
{
|
||||||
private static final Gson jsonParser_ = new Gson();
|
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=";
|
private static final String API_ROOT = "https://saucenao.com/search.php?dbmask=268435456&output_type=2&numres=10&api_key=" + Ref.SauceNAOKey +"&url=";
|
||||||
NetworkE621 e621Sauce = new NetworkE621();
|
NetworkE6 e6Sauce = new NetworkE6();
|
||||||
private class SauceNAOResponseObject
|
private class SauceNAOResponseObject
|
||||||
{
|
{
|
||||||
List<SauceNAOResult> results;
|
List<SauceNAOResult> results;
|
||||||
@@ -40,7 +40,8 @@ public class NetworkSauceNAO
|
|||||||
if(sauceUrl.startsWith("https://e621.net/post/show/"))
|
if(sauceUrl.startsWith("https://e621.net/post/show/"))
|
||||||
{
|
{
|
||||||
System.out.println("id:" + sauceUrl.substring(26));
|
System.out.println("id:" + sauceUrl.substring(26));
|
||||||
return e621Sauce.getE621("id:" + sauceUrl.substring(27)).toString();
|
System.out.println("HERE");
|
||||||
|
return e6Sauce.getE6("id:" + sauceUrl.substring(27)).toString();
|
||||||
}
|
}
|
||||||
return sauce.results.get(0).data.ext_urls[0];
|
return sauce.results.get(0).data.ext_urls[0];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,9 +73,36 @@ public class NetworkTheColorAPI
|
|||||||
|
|
||||||
public ColorData lookupHex(String hex)
|
public ColorData lookupHex(String hex)
|
||||||
{
|
{
|
||||||
|
if(hex == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
hex = hex.replace("#", "").trim();
|
||||||
|
int len = hex.length();
|
||||||
|
|
||||||
|
if(len == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Verify we're either a full or half length color. Intermediate colors not supported.
|
||||||
|
// Alpha is also not supported.
|
||||||
|
if(len != 6 && len != 3)
|
||||||
|
return null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
hex = hex.replace("#", "");
|
String hexUpper = hex.toUpperCase();
|
||||||
|
|
||||||
|
// Verify the number is hex.
|
||||||
|
for(int i = 0; i < hexUpper.length(); ++i)
|
||||||
|
{
|
||||||
|
char current = hexUpper.charAt(i);
|
||||||
|
Boolean isValidNum = current >= '0' && current <= '9';
|
||||||
|
Boolean isValidChar = current >= 'A' && current <= 'F';
|
||||||
|
|
||||||
|
// If it's not a valid character or a valid number, return null/
|
||||||
|
if(!isValidNum && !isValidChar)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
String response = HTTPUtils.sendGETRequest("https://www.thecolorapi.com/id?hex=" + hex);
|
String response = HTTPUtils.sendGETRequest("https://www.thecolorapi.com/id?hex=" + hex);
|
||||||
|
|
||||||
ColorData data = jsonParser.fromJson(response, ColorData.class);
|
ColorData data = jsonParser.fromJson(response, ColorData.class);
|
||||||
|
|||||||
@@ -119,6 +119,16 @@ public class AudioUtils
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getVolume(AudioPlayer player)
|
||||||
|
{
|
||||||
|
return player.getVolume();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeVolume(AudioPlayer player, int newVol)
|
||||||
|
{
|
||||||
|
player.setVolume(newVol);
|
||||||
|
}
|
||||||
|
|
||||||
public String skipVideo(AudioPlayer player)
|
public String skipVideo(AudioPlayer player)
|
||||||
{
|
{
|
||||||
player.stopTrack();
|
player.stopTrack();
|
||||||
@@ -152,6 +162,9 @@ class MusicController extends Thread
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
Thread.sleep(5000);
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
AudioTrack nowPlaying = null;
|
AudioTrack nowPlaying = null;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user