Merge branch 'develop'
This commit is contained in:
+1
-1
@@ -26,7 +26,7 @@
|
||||
<classpathentry kind="lib" path="lib/commons-text-1.6.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/LavaPlayerJar-0.0.1-jar-with-dependencies.jar"/>
|
||||
<classpathentry kind="lib" path="lib/nanohttpd-2.3.1.jar"/>
|
||||
<classpathentry kind="lib" path="G:/Shared/Coding/Java/workspace/ProKitty/lib/LavaPlayerJar-1.3.50-jar-with-dependencies.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.2 KiB |
@@ -247,6 +247,7 @@
|
||||
"Localized Strings","TeeyInfo","Teey yourself back into existance, or teey a friend with @!"
|
||||
"Localized Strings","TradeBeansInfo","Give your friends some of your beans! Just don't forget to @ them!"
|
||||
"Localized Strings","TradeBeansIntParseError","That's not a real number! D:"
|
||||
"Localized Strings","TradeBeansMultipleUsersTagged",""
|
||||
"Localized Strings","TradeBeansNoTargetError","Don't forget to tag who you want to give the beans to!"
|
||||
"Localized Strings","TradeBeansNotEnoughError","You can't give more beans than you have!"
|
||||
"Localized Strings","TradeBeansStealingBeans","Hey %s! Stealing is wrong! Let's see how you like it! *steals 10 beans*"
|
||||
|
||||
|
Binary file not shown.
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 50 KiB |
BIN
Binary file not shown.
@@ -1,7 +1,9 @@
|
||||
package commands.general;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -31,7 +33,7 @@ public class CommandBeansShow extends Command
|
||||
{
|
||||
if(input.mentions == null)
|
||||
{
|
||||
res.send("" + user.getBeans());
|
||||
//res.send("" + user.getBeans());
|
||||
try {
|
||||
res.sendFile(combineImages(user.getBeans()), "png");
|
||||
} catch (IOException e) {
|
||||
@@ -64,8 +66,6 @@ public class CommandBeansShow extends Command
|
||||
|
||||
long calcBean = beans;
|
||||
|
||||
System.out.println("BEANS: " + beans);
|
||||
|
||||
long thousands = beans / 1000;
|
||||
calcBean = beans % 1000;
|
||||
long hundreds = (calcBean / 100);
|
||||
@@ -76,6 +76,8 @@ public class CommandBeansShow extends Command
|
||||
|
||||
BufferedImage beanImage = new BufferedImage(baseWidth, baseHeight, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics beanGraphics = beanImage.getGraphics();
|
||||
Rectangle rect = new Rectangle(0, 0, baseWidth, baseHeight);
|
||||
beanGraphics.drawImage(imageBase,0,0,null);
|
||||
|
||||
for(int i = 0; i < ones; i++)
|
||||
{
|
||||
@@ -115,9 +117,22 @@ public class CommandBeansShow extends Command
|
||||
}
|
||||
Font beanFont = new Font("font", Font.BOLD, 45);
|
||||
beanGraphics.setFont(beanFont);
|
||||
beanGraphics.drawString("YOU GOT " + beans + " BEANS", 0, baseHeight / 2);
|
||||
|
||||
drawCenteredString(beanGraphics, "YOU HAVE", rect, beanFont, .25);
|
||||
drawCenteredString(beanGraphics, "" + beans, rect, beanFont, .5);
|
||||
drawCenteredString(beanGraphics, "BEANS!", rect, beanFont, .75);
|
||||
|
||||
ImageIO.write(beanImage, "PNG", new File("beanImage.png"));
|
||||
return new File("beanImage.png");
|
||||
}
|
||||
|
||||
private void drawCenteredString(Graphics beanGraphics, String text, Rectangle rect, Font font, double segment)
|
||||
{
|
||||
FontMetrics metrics = beanGraphics.getFontMetrics(font);
|
||||
|
||||
int x = rect.x + (rect.width - metrics.stringWidth(text)) / 2;
|
||||
int y = (int)(rect.y + ((rect.height - metrics.getHeight()) * segment) + metrics.getAscent());
|
||||
|
||||
beanGraphics.drawString(text, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@ public class CommandBetBeans extends Command
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Command, "Betting took place, but a value was not specified in the config file so 50 was used as the minimum bet threshold. Consider specifying BetBeansMinThreshold.");
|
||||
GlobalLog.log(LogFilter.Command, "Betting took place, but a value was not specified in the config file "
|
||||
+ "so 50 was used as the minimum bet threshold. Consider specifying BetBeansMinThreshold.");
|
||||
}
|
||||
|
||||
try
|
||||
|
||||
@@ -27,12 +27,20 @@ public class CommandChoose extends Command
|
||||
|
||||
String [] choices = input.args.split(",");
|
||||
|
||||
if(choices.length == 1)
|
||||
if(choices.length <= 1)
|
||||
{
|
||||
res.send(LocStrings.stub("ChooseOne"));
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < choices.length; i ++)
|
||||
{
|
||||
if (choices[i].equals(""))
|
||||
{
|
||||
choices[i] = "KittyBot is the best!";
|
||||
}
|
||||
}
|
||||
|
||||
res.send(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ public class CommandE6 extends Command
|
||||
{
|
||||
if(guild.contentRating == KittyRating.Filtered)
|
||||
{
|
||||
image = searcher.getE6(input.args + " rating:safe");
|
||||
image = searcher.getE6(input.args + " rating:safe", "");
|
||||
try
|
||||
{
|
||||
response = image.output();
|
||||
@@ -58,7 +58,7 @@ public class CommandE6 extends Command
|
||||
{
|
||||
try
|
||||
{
|
||||
response = searcher.getE6(input.args).output();
|
||||
response = searcher.getE6(input.args, "").output();
|
||||
res.send(response);
|
||||
}
|
||||
catch(Exception e)
|
||||
|
||||
@@ -1,29 +1,35 @@
|
||||
package commands.general;
|
||||
|
||||
import core.Command;
|
||||
import core.LocStrings;
|
||||
import dataStructures.KittyChannel;
|
||||
import dataStructures.KittyGuild;
|
||||
import dataStructures.KittyRating;
|
||||
import dataStructures.KittyRole;
|
||||
import dataStructures.KittyUser;
|
||||
import dataStructures.Response;
|
||||
import dataStructures.UserInput;
|
||||
import network.NetworkSauceNAO;
|
||||
|
||||
public class CommandGetSauce extends Command
|
||||
{
|
||||
NetworkSauceNAO sauce = new NetworkSauceNAO();
|
||||
|
||||
public CommandGetSauce(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||
|
||||
@Override
|
||||
public String getHelpText() { return LocStrings.stub("GetSauceInfo"); };
|
||||
|
||||
@Override
|
||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||
{
|
||||
res.send(sauce.getSauce(input.args));
|
||||
|
||||
}
|
||||
package commands.general;
|
||||
|
||||
import core.Command;
|
||||
import core.LocStrings;
|
||||
import dataStructures.KittyChannel;
|
||||
import dataStructures.KittyGuild;
|
||||
import dataStructures.KittyRating;
|
||||
import dataStructures.KittyRole;
|
||||
import dataStructures.KittyUser;
|
||||
import dataStructures.Response;
|
||||
import dataStructures.UserInput;
|
||||
import network.NetworkSauceNAO;
|
||||
|
||||
public class CommandGetSauce extends Command
|
||||
{
|
||||
NetworkSauceNAO sauce = new NetworkSauceNAO();
|
||||
|
||||
public CommandGetSauce(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||
|
||||
@Override
|
||||
public String getHelpText() { return LocStrings.stub("GetSauceInfo"); };
|
||||
|
||||
@Override
|
||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||
{
|
||||
try
|
||||
{
|
||||
res.send(sauce.getSauce(input.args).output());
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
res.send("Image not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,11 @@ public class CommandTradeBeans extends Command
|
||||
res.send(LocStrings.stub("TradeBeansNoTargetError"));
|
||||
return;
|
||||
}
|
||||
if(input.mentions.length > 1)
|
||||
{
|
||||
res.send(LocStrings.stub("TradeBeansMultipleUsersTagged"));
|
||||
return;
|
||||
}
|
||||
|
||||
int beans = 0;
|
||||
|
||||
|
||||
@@ -167,7 +167,8 @@ public class ObjectBuilderFactory
|
||||
else
|
||||
{
|
||||
// Construct a new guild with defaults
|
||||
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager), channels);
|
||||
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString,
|
||||
new AudioUtils(event.getGuild(), playerManager), channels);
|
||||
DatabaseManager.instance.globalRegister(guild);
|
||||
guildCache.put(uid, guild);
|
||||
}
|
||||
@@ -176,6 +177,8 @@ public class ObjectBuilderFactory
|
||||
return guild;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Explicitly locks: guildCache
|
||||
public static KittyRole extractRole(GuildMessageReceivedEvent event)
|
||||
{
|
||||
|
||||
@@ -44,7 +44,8 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
}
|
||||
|
||||
// Default content for a guild
|
||||
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji,
|
||||
AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
{
|
||||
|
||||
super(uniqueID);
|
||||
@@ -63,7 +64,8 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
}
|
||||
|
||||
// Explicit constructor
|
||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner,
|
||||
String uniqueID, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
{
|
||||
super(uniqueID);
|
||||
this.uniqueID = uniqueID;
|
||||
|
||||
+153
-146
@@ -1,146 +1,153 @@
|
||||
package dataStructures;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
|
||||
import net.dv8tion.jda.core.JDA;
|
||||
import net.dv8tion.jda.core.MessageBuilder;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.*;
|
||||
import net.dv8tion.jda.core.EmbedBuilder;
|
||||
import utils.GlobalLog;
|
||||
import utils.LogFilter;
|
||||
|
||||
// This isn't constructed with the factory at this time, mostly because we need it
|
||||
// to handle all the response queue behavior and everything internally. So long as
|
||||
// commands aren't exposed to the GuildMessageReceivedEvent then we should be fine.
|
||||
public class Response
|
||||
{
|
||||
// Variables
|
||||
private GuildMessageReceivedEvent event;
|
||||
private final int discordMessageMax = 2000;
|
||||
private final int kittyMessageMax = 1950;
|
||||
private JDA kitty;
|
||||
|
||||
// Constructor
|
||||
public Response(GuildMessageReceivedEvent event, KittyCore kitty)
|
||||
{
|
||||
this.event = event;
|
||||
this.kitty = kitty.jda;
|
||||
}
|
||||
|
||||
// Builds a nicely formatted embedded message based on information provided
|
||||
public void send(KittyEmbed embedInfo)
|
||||
{
|
||||
EmbedBuilder embed = new EmbedBuilder();
|
||||
|
||||
if(embedInfo.title != null && !embedInfo.title.isEmpty())
|
||||
{
|
||||
embed.setTitle(embedInfo.title);
|
||||
}
|
||||
else
|
||||
{
|
||||
// We have to set the title to at least something that's not empty.
|
||||
// By defualt, this creates nothing really visible.
|
||||
embed.setTitle(" ");
|
||||
}
|
||||
|
||||
if(embedInfo.color != null)
|
||||
embed.setColor(embedInfo.color);
|
||||
|
||||
if(embedInfo.descriptionText != null)
|
||||
embed.setDescription(embedInfo.descriptionText);
|
||||
|
||||
if(embedInfo.footerText != null)
|
||||
embed.setFooter(embedInfo.footerText, null);
|
||||
|
||||
if(embedInfo.authorImage != null || embedInfo.authorLink != null || embedInfo.authorText != null)
|
||||
embed.setAuthor(embedInfo.authorText, embedInfo.authorLink, embedInfo.authorImage);
|
||||
|
||||
if(embedInfo.imageURL != null)
|
||||
embed.setImage(embedInfo.imageURL);
|
||||
|
||||
if(embedInfo.thumbnailURL != null && embedInfo.thumbnailURL.contains("attachment://"))
|
||||
{
|
||||
// This is the case where you have a thumbnail image, but you want it to be a local file.
|
||||
// TODO: Make this more generic. Consider message builder for the entire thing.
|
||||
String thumbPath = embedInfo.thumbnailURL;
|
||||
String thumbName = thumbPath.replace("attachment://", "");
|
||||
|
||||
// Build the message and send if the file is valid
|
||||
MessageBuilder message = new MessageBuilder();
|
||||
embed.setThumbnail(thumbPath);
|
||||
message.setEmbed(embed.build());
|
||||
|
||||
File thumbImage = new File(thumbName);
|
||||
if(thumbImage.exists())
|
||||
{
|
||||
event.getChannel().sendFile(thumbImage, thumbName, message.build()).queue();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(embedInfo.thumbnailURL != null)
|
||||
embed.setThumbnail(embedInfo.thumbnailURL);
|
||||
|
||||
event.getChannel().sendMessage(embed.build()).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a standard text-based message response to the channel that issued the command.
|
||||
public void send(String toRespondWith)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending response: " + toRespondWith);
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||
}
|
||||
else
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a standard text-based message response to the specified channel.
|
||||
public void sendToChannel(String toRespondWith, String channelID)
|
||||
{
|
||||
TextChannel channel;
|
||||
channel = kitty.getTextChannelById(Long.parseLong(channelID));
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
channel.sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||
}
|
||||
else
|
||||
{
|
||||
channel.sendMessage(toRespondWith).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Immediately dispatches the message to the channel that issued the command.
|
||||
public void sendImmediate(String toRespondWith)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending immediate response: " + toRespondWith);
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!");
|
||||
}
|
||||
else
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith).complete();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a file response to the channel that issued the command.
|
||||
public void sendFile(File toRespondWith, String extension)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending file response");
|
||||
event.getChannel().sendFile(toRespondWith, "return." + extension).queue();
|
||||
}
|
||||
|
||||
// Queues an input stream response to the channel that issued the command.
|
||||
public void sendFile(InputStream in, String extension)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending input stream response");
|
||||
event.getChannel().sendFile(in, "return." + extension).queue();
|
||||
}
|
||||
}
|
||||
package dataStructures;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
|
||||
import net.dv8tion.jda.core.JDA;
|
||||
import net.dv8tion.jda.core.MessageBuilder;
|
||||
import net.dv8tion.jda.core.entities.TextChannel;
|
||||
import net.dv8tion.jda.core.events.message.guild.*;
|
||||
import net.dv8tion.jda.core.EmbedBuilder;
|
||||
import utils.GlobalLog;
|
||||
import utils.LogFilter;
|
||||
|
||||
// This isn't constructed with the factory at this time, mostly because we need it
|
||||
// to handle all the response queue behavior and everything internally. So long as
|
||||
// commands aren't exposed to the GuildMessageReceivedEvent then we should be fine.
|
||||
public class Response
|
||||
{
|
||||
// Variables
|
||||
private GuildMessageReceivedEvent event;
|
||||
private final int discordMessageMax = 2000;
|
||||
private final int kittyMessageMax = 1950;
|
||||
private JDA kitty;
|
||||
|
||||
// Constructor
|
||||
public Response(GuildMessageReceivedEvent event, KittyCore kitty)
|
||||
{
|
||||
this.event = event;
|
||||
this.kitty = kitty.jda;
|
||||
}
|
||||
|
||||
// Builds a nicely formatted embedded message based on information provided
|
||||
public void send(KittyEmbed embedInfo)
|
||||
{
|
||||
EmbedBuilder embed = new EmbedBuilder();
|
||||
|
||||
if(embedInfo.title != null && !embedInfo.title.isEmpty())
|
||||
{
|
||||
embed.setTitle(embedInfo.title);
|
||||
}
|
||||
else
|
||||
{
|
||||
// We have to set the title to at least something that's not empty.
|
||||
// By defualt, this creates nothing really visible.
|
||||
embed.setTitle(" ");
|
||||
}
|
||||
|
||||
if(embedInfo.color != null)
|
||||
embed.setColor(embedInfo.color);
|
||||
|
||||
if(embedInfo.descriptionText != null)
|
||||
embed.setDescription(embedInfo.descriptionText);
|
||||
|
||||
if(embedInfo.footerText != null)
|
||||
embed.setFooter(embedInfo.footerText, null);
|
||||
|
||||
if(embedInfo.authorImage != null || embedInfo.authorLink != null || embedInfo.authorText != null)
|
||||
embed.setAuthor(embedInfo.authorText, embedInfo.authorLink, embedInfo.authorImage);
|
||||
|
||||
if(embedInfo.imageURL != null)
|
||||
embed.setImage(embedInfo.imageURL);
|
||||
|
||||
if(embedInfo.thumbnailURL != null && embedInfo.thumbnailURL.contains("attachment://"))
|
||||
{
|
||||
// This is the case where you have a thumbnail image, but you want it to be a local file.
|
||||
// TODO: Make this more generic. Consider message builder for the entire thing.
|
||||
String thumbPath = embedInfo.thumbnailURL;
|
||||
String thumbName = thumbPath.replace("attachment://", "");
|
||||
|
||||
// Build the message and send if the file is valid
|
||||
MessageBuilder message = new MessageBuilder();
|
||||
embed.setThumbnail(thumbPath);
|
||||
message.setEmbed(embed.build());
|
||||
|
||||
File thumbImage = new File(thumbName);
|
||||
if(thumbImage.exists())
|
||||
{
|
||||
event.getChannel().sendFile(thumbImage, thumbName, message.build()).queue();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(embedInfo.thumbnailURL != null)
|
||||
embed.setThumbnail(embedInfo.thumbnailURL);
|
||||
|
||||
event.getChannel().sendMessage(embed.build()).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a standard text-based message response to the channel that issued the command.
|
||||
public void send(String toRespondWith)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending response: " + toRespondWith);
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||
}
|
||||
else
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a standard text-based message response to the specified channel.
|
||||
public void sendToChannel(String toRespondWith, String channelID)
|
||||
{
|
||||
TextChannel channel;
|
||||
channel = kitty.getTextChannelById(Long.parseLong(channelID));
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
channel.sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||
}
|
||||
else
|
||||
{
|
||||
channel.sendMessage(toRespondWith).queue();
|
||||
}
|
||||
}
|
||||
|
||||
// Immediately dispatches the message to the channel that issued the command.
|
||||
public void sendImmediate(String toRespondWith)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending immediate response: " + toRespondWith);
|
||||
if(toRespondWith.length() > discordMessageMax)
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!");
|
||||
}
|
||||
else
|
||||
{
|
||||
event.getChannel().sendMessage(toRespondWith).complete();
|
||||
}
|
||||
}
|
||||
|
||||
// Queues a file response to the channel that issued the command.
|
||||
public void sendFile(File toRespondWith, String extension)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending file response");
|
||||
event.getChannel().sendFile(toRespondWith, "return." + extension).queue();
|
||||
}
|
||||
|
||||
// Queues an input stream response to the channel that issued the command.
|
||||
public void sendFile(InputStream in, String extension)
|
||||
{
|
||||
GlobalLog.log(LogFilter.Response, "Sending input stream response");
|
||||
event.getChannel().sendFile(in, "return." + extension).queue();
|
||||
}
|
||||
|
||||
//Sends Kittybot as an object
|
||||
//WARNING: THIS WILL EDIT THE ENTIRE BOT, DO NOT USE LIGHTLY
|
||||
public JDA getKitty()
|
||||
{
|
||||
return kitty;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -118,7 +118,8 @@ public class Main extends ListenerAdapter
|
||||
{
|
||||
if(pluginOutput.get(i).startsWith("!"))
|
||||
{
|
||||
commandManager.invokeOnNewThread(guild, channel, user, new UserInput(pluginOutput.get(i).substring(1), guild), response);
|
||||
commandManager.invokeOnNewThread(guild, channel, user,
|
||||
new UserInput(pluginOutput.get(i).substring(1), guild), response);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ import utils.*;
|
||||
|
||||
public class NetworkDerpi
|
||||
{
|
||||
private final String mainURL = "https://derpibooru.org/search.json?q=";
|
||||
private final String mainURL = "https://derpibooru.org/api/v1/json/search/images?q=";
|
||||
private static final Gson jsonParser_ = new Gson();
|
||||
|
||||
private class DerpiResponseObject
|
||||
@@ -24,10 +24,20 @@ public class NetworkDerpi
|
||||
|
||||
public GenericImage getDerpi(String query)
|
||||
{
|
||||
String res;
|
||||
GenericImage image = new GenericImage(" ", " ", " ");
|
||||
query = query.trim();
|
||||
query = query.replace(" ", ",");
|
||||
String res = HTTPUtils.sendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey);
|
||||
System.out.println(mainURL + query + "&sf=random&key=" + Ref.derpiKey);
|
||||
if(query.startsWith("ID:"))
|
||||
{
|
||||
res = HTTPUtils.sendGETRequest("https://derpibooru.org/api/v1/json/images/" + query.substring(3));
|
||||
}
|
||||
else
|
||||
{
|
||||
res = HTTPUtils.sendGETRequest(mainURL + query + "&sf=random&key=" + Ref.derpiKey);
|
||||
}
|
||||
System.out.println(res);
|
||||
if(res != null)
|
||||
{
|
||||
InitialRequest obj;
|
||||
@@ -43,7 +53,6 @@ public class NetworkDerpi
|
||||
|
||||
if(res != null)
|
||||
{
|
||||
|
||||
String res2 = HTTPUtils.sendGETRequest("https://derpibooru.org/" + obj.id + ".json");
|
||||
image.editPostURL("https://derpibooru.org/" + obj.id);
|
||||
DerpiResponseObject imageObj = jsonParser_.fromJson(res2, DerpiResponseObject.class);
|
||||
|
||||
+27
-10
@@ -79,7 +79,7 @@ public class NetworkE6
|
||||
// Static methods //
|
||||
////////////////////
|
||||
// Requests a specific image, then returns a few.
|
||||
public GenericImage getE6(String input)
|
||||
public GenericImage getE6(String input, String sauceNaoDependant)
|
||||
{
|
||||
GenericImage image = new GenericImage("","","");
|
||||
boolean blacklisted;
|
||||
@@ -92,14 +92,11 @@ public class NetworkE6
|
||||
// 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)
|
||||
@@ -133,9 +130,9 @@ public class NetworkE6
|
||||
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];
|
||||
String artists = imageObj.posts[i].tags.artist[0];
|
||||
for(int j = 1; j < imageObj.posts[i].tags.artist.length; j++)
|
||||
artists += ", " + imageObj.posts[i].tags.artist[j];
|
||||
image.editArtist(artists);
|
||||
}
|
||||
else
|
||||
@@ -160,12 +157,27 @@ public class NetworkE6
|
||||
else
|
||||
{
|
||||
source = source.substring(source.indexOf("/") + 2);
|
||||
source = source.substring(0, source.indexOf('.'));
|
||||
source = "[" + source.substring(0, source.indexOf('.')) + "]";
|
||||
if(source.equals("[pbs]"))
|
||||
{
|
||||
source = "[twitter-cdn]";
|
||||
}
|
||||
}
|
||||
sources += " [" + source + "](" + imageObj.posts[i].sources[k] + ") ";
|
||||
}
|
||||
}
|
||||
image.editDescriptionText("Score: " + imageObj.posts[i].score.total + "\n**Source:**" + sources);
|
||||
if(sources.equals(""))
|
||||
{
|
||||
sources = " Source not listed";
|
||||
}
|
||||
if(sauceNaoDependant.equals(""))
|
||||
{
|
||||
image.editDescriptionText("Score: " + imageObj.posts[i].score.total + "\n**Source:**" + sources);
|
||||
}
|
||||
else
|
||||
{
|
||||
image.editDescriptionText(sauceNaoDependant + "\nScore: " + imageObj.posts[i].score.total + "\n**Source:**" + sources);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -184,7 +196,12 @@ public class NetworkE6
|
||||
}
|
||||
else
|
||||
{
|
||||
descTags = imageObj.posts[i].tags.general.toString();
|
||||
for(int o = 0; o < imageObj.posts[i].tags.general.length - 1; o++)
|
||||
{
|
||||
descTags += imageObj.posts[i].tags.general[o] + ", ";
|
||||
}
|
||||
descTags += imageObj.posts[i].tags.general[imageObj.posts[i].tags.general.length-1] + "";
|
||||
|
||||
image.editFooterText("[Tags] " + descTags);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import dataStructures.GenericImage;
|
||||
import offline.Ref;
|
||||
import utils.HTTPUtils;
|
||||
|
||||
@@ -20,6 +21,12 @@ public class NetworkSauceNAO
|
||||
private class SauceNAOResult
|
||||
{
|
||||
SauceNAOData data;
|
||||
SauceNAOHeader header;
|
||||
}
|
||||
|
||||
private class SauceNAOHeader
|
||||
{
|
||||
double similarity;
|
||||
}
|
||||
|
||||
private class SauceNAOData
|
||||
@@ -27,23 +34,23 @@ public class NetworkSauceNAO
|
||||
String [] ext_urls;
|
||||
}
|
||||
|
||||
public String getSauce(String input)
|
||||
public GenericImage getSauce(String input)
|
||||
{
|
||||
double similarity;
|
||||
input = input.trim();
|
||||
input = input.replace("+", "%2B");
|
||||
input = input.replace(" ", "%20");
|
||||
|
||||
String res = HTTPUtils.sendGETRequest(API_ROOT + input);
|
||||
|
||||
SauceNAOResponseObject sauce = jsonParser_.fromJson(res, SauceNAOResponseObject.class);
|
||||
String sauceUrl = sauce.results.get(0).data.ext_urls[0];
|
||||
similarity = sauce.results.get(0).header.similarity;
|
||||
if(sauceUrl.startsWith("https://e621.net/post/show/"))
|
||||
{
|
||||
System.out.println("id:" + sauceUrl.substring(26));
|
||||
System.out.println("HERE");
|
||||
return e6Sauce.getE6("id:" + sauceUrl.substring(27)).toString();
|
||||
return e6Sauce.getE6("id:" + sauceUrl.substring(27), "Confidence: " + similarity + "%");
|
||||
}
|
||||
return sauce.results.get(0).data.ext_urls[0];
|
||||
GenericImage unknown = new GenericImage("", "","");
|
||||
return unknown;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,11 +27,11 @@ public class NetworkYoutube
|
||||
|
||||
public class YTInner
|
||||
{
|
||||
TYID id;
|
||||
YTID id;
|
||||
YTSnippet snippet;
|
||||
}
|
||||
|
||||
public class TYID
|
||||
public class YTID
|
||||
{
|
||||
String videoId;
|
||||
}
|
||||
@@ -48,8 +48,9 @@ public class NetworkYoutube
|
||||
input = input.replace("+", "%2B");
|
||||
input = input.replace(" ", "%20");
|
||||
|
||||
String res = HTTPUtils.sendGETRequest(API_ROOT + input + "&order=viewCount&type=video&topicId=%2Fm%2F04rlf&videoDefinition=high&key=" + Ref.youtube);
|
||||
String res = HTTPUtils.sendGETRequest(API_ROOT + input +
|
||||
"&order=viewCount&type=video&topicId=%2Fm%2F04rlf&videoDefinition=high&key=" + Ref.youtube);
|
||||
YTOuter videoObj = jsonParser_.fromJson(res, YTOuter.class);
|
||||
return "https://www.youtube.com/watch?v=" + videoObj.items.get(0).id.videoId;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user