summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-08-26 06:45:57 -0400
committerTyler Murphy <tylermurphy534@gmail.com>2022-08-26 06:45:57 -0400
commit039cb6258fa8934a22a8c06806f2419730d5eede (patch)
treefbc3401746ceb903d3ab7ab624b208ec4358024a
parentv7 (diff)
downloadken-039cb6258fa8934a22a8c06806f2419730d5eede.tar.gz
ken-039cb6258fa8934a22a8c06806f2419730d5eede.tar.bz2
ken-039cb6258fa8934a22a8c06806f2419730d5eede.zip
v7
-rw-r--r--src/main/java/net/tylermurphy/ken/command/Responder.java14
-rw-r--r--src/main/java/net/tylermurphy/ken/command/Response.java90
-rw-r--r--src/main/java/net/tylermurphy/ken/command/fun/Eject.java4
-rw-r--r--src/main/java/net/tylermurphy/ken/command/main/Help.java125
-rw-r--r--src/main/java/net/tylermurphy/ken/command/main/Roles.java12
-rw-r--r--src/main/java/net/tylermurphy/ken/command/music/Queue.java14
-rw-r--r--src/main/java/net/tylermurphy/ken/image/GifFactory.java31
-rw-r--r--src/main/java/net/tylermurphy/ken/image/ImageFactory.java29
8 files changed, 156 insertions, 163 deletions
diff --git a/src/main/java/net/tylermurphy/ken/command/Responder.java b/src/main/java/net/tylermurphy/ken/command/Responder.java
index 75f685b..014e745 100644
--- a/src/main/java/net/tylermurphy/ken/command/Responder.java
+++ b/src/main/java/net/tylermurphy/ken/command/Responder.java
@@ -13,18 +13,13 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
-import net.dv8tion.jda.api.interactions.components.ActionComponent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.LayoutComponent;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.selections.SelectMenu;
-import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
-import net.dv8tion.jda.api.requests.restaction.WebhookMessageEditAction;
import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
import net.dv8tion.jda.api.utils.FileUpload;
import net.tylermurphy.ken.Ken;
-import net.tylermurphy.ken.command.Register;
-import net.tylermurphy.ken.command.Response;
import net.tylermurphy.ken.command.fun.*;
import net.tylermurphy.ken.command.main.*;
import net.tylermurphy.ken.command.music.*;
@@ -134,7 +129,6 @@ public class Responder extends ListenerAdapter {
.setTitle(":x: **Error**")
.setDescription(e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
event.replyEmbeds(builder.build()).setEphemeral(true).queue();
- e.printStackTrace();
}
}
@@ -234,7 +228,7 @@ public class Responder extends ListenerAdapter {
}
private void reply(Response response, IReplyCallback event){
- if(response.error()) {
+ if(response.isError()) {
EmbedBuilder builder = Ken.getInstance().getDefaultEmbed()
.setColor(Color.RED)
.setDescription(response.getMessage());
@@ -248,18 +242,18 @@ public class Responder extends ListenerAdapter {
}
if(response.hasButtons()) message = message.addActionRow(response.getButtons());
if(response.hasSelectMenu()) message = message.addActionRow(response.getSelectMenu());
- if(response.hasFile()) message = message.addFiles(FileUpload.fromData(response.getFile()));
+ if(response.hasFile()) message = message.addFiles(FileUpload.fromData(response.getFile(),response.getFileName()));
message.setEphemeral(response.isHidden()).queue();
}
}
private void edit(Response response, InteractionHook hook){
- if(response.error()) {
+ if(response.isError()) {
EmbedBuilder builder = Ken.getInstance().getDefaultEmbed()
.setColor(Color.RED)
.setDescription(response.getMessage());
hook.sendMessageEmbeds(builder.build()).queue();
- } else if(response.remove()) {
+ } else if(response.isDelete()) {
hook.deleteOriginal().queue();
} else {
if(response.hasEmbed()) {
diff --git a/src/main/java/net/tylermurphy/ken/command/Response.java b/src/main/java/net/tylermurphy/ken/command/Response.java
index ff69cda..763ccae 100644
--- a/src/main/java/net/tylermurphy/ken/command/Response.java
+++ b/src/main/java/net/tylermurphy/ken/command/Response.java
@@ -4,74 +4,88 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.selections.SelectMenu;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Response {
- private final String message;
- private final String type;
- private final MessageEmbed[] embeds;
- private final List<Button> buttons;
- private final SelectMenu.Builder menu;
- private final File file;
+ private String message;
+ private String type;
- private boolean hidden = false;
+ private MessageEmbed[] embeds;
- private Response(String type, String message, File file, MessageEmbed... embed){
- this.type = type;
- this.message = message;
- this.embeds = embed;
- this.file = file;
- this.buttons = new ArrayList<>();
- menu = SelectMenu.create("null");
- }
+ private List<Button> buttons;
+ private SelectMenu menu;
+
+ private byte[] data;
+ private String fileName;
+
+ private boolean hidden = false;
public static Response error(String message){
- return new Response("error", message, null, null);
+ Response response = new Response();
+ response.type = "error";
+ response.message = message;
+ return response;
}
public static Response success(String message){
- return new Response("success", message, null, null);
+ Response response = new Response();
+ response.type = "success";
+ response.message = message;
+ return response;
}
- public static Response success(String message, File file){
- return new Response("success", message, file, null);
+ public static Response success(MessageEmbed... embeds){
+ Response response = new Response();
+ response.type = "success";
+ response.embeds = embeds;
+ return response;
}
- public static Response success(MessageEmbed... embed){
- return new Response("success", "", null, embed);
+ public static Response delete() {
+ Response response = new Response();
+ response.type = "delete";
+ return response;
}
- public static Response delete() { return new Response("delete", "", null, null); }
-
public Response addPrimaryButton(String callback, String id, String label){
+ if(buttons == null) buttons = new ArrayList<>();
buttons.add(Button.primary(callback + "_" + id ,label));
return this;
}
public Response addSecondaryButton(String callback, String id, String label){
+ if(buttons == null) buttons = new ArrayList<>();
buttons.add(Button.secondary(callback + "_" + id ,label));
return this;
}
public Response addSuccessButton(String callback, String id, String label){
+ if(buttons == null) buttons = new ArrayList<>();
buttons.add(Button.success(callback + "_" + id ,label));
return this;
}
public Response addDangerButton(String callback, String id, String label){
+ if(buttons == null) buttons = new ArrayList<>();
buttons.add(Button.danger(callback + "_" + id ,label));
return this;
}
public Response addSelectMenu(String callback, String id, List<String> options){
- menu.setId(callback + "_" + id);
+ SelectMenu.Builder builder = SelectMenu.create(callback + "_" + id);
for(int i=0; i<options.size(); i = i + 2) {
- menu.addOption(options.get(i), options.get(i+1));
+ builder.addOption(options.get(i), options.get(i+1));
}
+ menu = builder.build();
+ return this;
+ }
+
+ public Response setFile(byte[] data, String name){
+ this.data = data;
+ this.fileName = name;
return this;
}
@@ -80,21 +94,21 @@ public class Response {
return this;
}
- public boolean error(){
+ public boolean isError(){
return type.equals("error");
}
- public boolean remove() { return type.equals("delete"); }
+ public boolean isDelete() { return type.equals("delete"); }
+
+ public boolean isHidden() { return hidden; }
public boolean hasEmbed() { return embeds != null; }
- public boolean hasFile() { return file != null; }
+ public boolean hasFile() { return data != null; }
- public boolean hasButtons() { return !buttons.isEmpty(); }
+ public boolean hasButtons() { return buttons != null; }
- public boolean hasSelectMenu() { return !menu.getId().equals("null"); }
-
- public boolean isHidden() { return hidden; }
+ public boolean hasSelectMenu() { return menu != null; }
public Button[] getButtons() {
Button[] arr = new Button[buttons.size()];
@@ -103,11 +117,15 @@ public class Response {
}
public SelectMenu getSelectMenu(){
- return menu.build();
+ return menu;
+ }
+
+ public byte[] getFile(){
+ return data;
}
- public File getFile(){
- return file;
+ public String getFileName(){
+ return fileName;
}
public String getMessage(){
diff --git a/src/main/java/net/tylermurphy/ken/command/fun/Eject.java b/src/main/java/net/tylermurphy/ken/command/fun/Eject.java
index a7d74eb..eac2a2c 100644
--- a/src/main/java/net/tylermurphy/ken/command/fun/Eject.java
+++ b/src/main/java/net/tylermurphy/ken/command/fun/Eject.java
@@ -16,8 +16,8 @@ public class Eject {
@Option(name="member", description="Server member to eject", type=OptionType.USER, required=true)
public Response execute(Member sender, List<Object> args){
Member ejected = (Member) args.get(0);
- File file = GifFactory.generateEjectGif(ejected.getUser());
- return Response.success(ejected.getNickname() +" was ejected by "+sender.getNickname(), file);
+ byte[] data = GifFactory.generateEjectGif(ejected.getUser());
+ return Response.success(ejected.getEffectiveName() +" was ejected by "+sender.getEffectiveName()).setFile(data, "eject.gif");
}
}
diff --git a/src/main/java/net/tylermurphy/ken/command/main/Help.java b/src/main/java/net/tylermurphy/ken/command/main/Help.java
index 4970823..4b13bba 100644
--- a/src/main/java/net/tylermurphy/ken/command/main/Help.java
+++ b/src/main/java/net/tylermurphy/ken/command/main/Help.java
@@ -11,17 +11,15 @@ import net.tylermurphy.ken.command.Response;
public class Help {
- private final int PAGES = 5;
-
@Command(name="help", description="Gets information about all the commands in the plugin")
public Response execute(Member sender){
- return Response.success(getPage(sender, 1)).addSecondaryButton("help", "previous", "Previous").addSecondaryButton("help", "next", "Next");
+ return Response.success(pageEmbeds[0].setFooter("Page "+1+"/"+pageEmbeds.length).build()).addSecondaryButton("help", "previous", "Previous").addSecondaryButton("help", "next", "Next").addDangerButton("exit","exit","Exit");
}
@ButtonCallback(name="help")
public Response onButton(String id, Message message, Member sender){
int page;
- int pages = PAGES;
+ int pages = pageEmbeds.length;
if (message != null && message.getEmbeds().size() > 0 && message.getEmbeds().get(0) != null) {
page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split("/")[0].substring(5));
} else {
@@ -31,66 +29,67 @@ public class Help {
page = page - 1 < 1 ? pages : page - 1;
else
page = page + 1 > pages ? 1 : page + 1;
- return Response.success(getPage(sender, page));
+ return Response.success(pageEmbeds[page-1].setFooter("Page "+page+"/"+pageEmbeds.length).build());
}
- private MessageEmbed getPage(Member sender, int page) {
- String name = Ken.getInstance().getConfig().getString("botName");
- String supportServer = Ken.getInstance().getConfig().getString("supportServer");
- EmbedBuilder[] embeds = new EmbedBuilder[]{
- Ken.getInstance().getDefaultEmbed()
- .setAuthor(name + " Command List", sender.getUser().getAvatarUrl())
- .appendDescription(
- "These are all the commands that are included with "+name+"\n" +
- "Read below to see what each command does, and what parameters the\n" +
- "command requires. Any questions? Join our [discord support server](https://discord.gg/"+supportServer+")"
- ).setFooter("Page "+page+"/"+PAGES),
- Ken.getInstance().getDefaultEmbed()
- .setAuthor(name + " Command List", sender.getUser().getAvatarUrl())
- .setTitle(":pen_ballpoint: **Main Commands**")
- .appendDescription("**/help** Gives a list of commands\n")
- .appendDescription("**/purge <amount>** Purges an amount of messages from a channel\n")
- .setFooter("Page "+page+"/"+PAGES),
- Ken.getInstance().getDefaultEmbed()
- .setAuthor(name + " Command List", sender.getUser().getAvatarUrl())
- .setTitle(":musical_note: **Music Commands**")
- .appendDescription("**/play <query>** Plays a song in a voice channel\n")
- .appendDescription("**/join** Make the bot join your audio channel\n")
- .appendDescription("**/leave** Make the bot leave your audio channel\n")
- .appendDescription("**/pause** Pause the current playing track\n")
- .appendDescription("**/resume** Resume the current paused track\n")
- .appendDescription("**/stop** Stop the current playing track and clear queue\n")
- .appendDescription("**/skip** Vote to skip the current track\n")
- .appendDescription("**/forceskip** Force skip the current track\n")
- .appendDescription("**/loop** Loop the current track\n")
- .appendDescription("**/loopqueue** Loop the current song queue\n")
- .appendDescription("**/remove <index>** Remove a song from the queue\n")
- .appendDescription("**/nowplaying** See what track is currently playing\n")
- .appendDescription("**/queue** View the current song queue\n")
- .setFooter("Page "+page+"/"+PAGES),
- Ken.getInstance().getDefaultEmbed()
- .setAuthor(name + " Command List", sender.getUser().getAvatarUrl())
- .setTitle(":game_die: **Game Commands**")
- .appendDescription("**/d6** Roll a d6 die\n")
- .appendDescription("**/d8** Roll a d8 die\n")
- .appendDescription("**/d12** Roll a d12 die\n")
- .appendDescription("**/d20** Roll a d20 die\n")
- .appendDescription("**/dice <sides>** Roll a dice with set sides\n")
- .setFooter("Page "+page+"/"+PAGES),
- Ken.getInstance().getDefaultEmbed()
- .setAuthor(name + " Command List", sender.getUser().getAvatarUrl())
- .setTitle(":underage: **NSFW Commands**")
- .appendDescription("**/hentai <query>** Retrieves a random hentai image\n")
- .appendDescription("**/rule34 <query> <page>** Searches on rule34\n")
- .appendDescription("**/gelbooru <query> <page>** Searches on gelbooru\n")
- .appendDescription("**/danbooru <query> <page>** Searches on danbooru\n")
- .appendDescription("**/konachan <query> <page>** Searches on konachan\n")
- .appendDescription("**/yandere <query> <page>** Searches on yande.re\n")
- .appendDescription("**/e621 <query> <page>** Searches on e621\n")
- .appendDescription("**/nhentai <query>** Searches on nhentai\n")
- .setFooter("Page "+page+"/"+PAGES)
- };
- return embeds[page-1].build();
- }
+ String name = Ken.getInstance().getConfig().getString("botName");
+ String supportServer = Ken.getInstance().getConfig().getString("supportServer");
+ EmbedBuilder[] pageEmbeds = new EmbedBuilder[]{
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .appendDescription(
+ "These are all the commands that are included with "+name+"\n" +
+ "Read below to see what each command does, and what parameters the\n" +
+ "command requires. Any questions? Join our [discord support server](https://discord.gg/"+supportServer+")"
+ ),
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .setTitle(":pen_ballpoint: **Main Commands**")
+ .appendDescription("**/help** Gives a list of commands\n")
+ .appendDescription("**/purge <amount>** Purges an amount of messages from a channel\n"),
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .setTitle(":musical_note: **Music Commands**")
+ .appendDescription("**/play <query>** Plays a song in a voice channel\n")
+ .appendDescription("**/join** Make the bot join your audio channel\n")
+ .appendDescription("**/leave** Make the bot leave your audio channel\n")
+ .appendDescription("**/pause** Pause the current playing track\n")
+ .appendDescription("**/resume** Resume the current paused track\n")
+ .appendDescription("**/stop** Stop the current playing track and clear queue\n")
+ .appendDescription("**/skip** Vote to skip the current track\n")
+ .appendDescription("**/forceskip** Force skip the current track\n")
+ .appendDescription("**/loop** Loop the current track\n")
+ .appendDescription("**/loopqueue** Loop the current song queue\n")
+ .appendDescription("**/remove <index>** Remove a song from the queue\n")
+ .appendDescription("**/nowplaying** See what track is currently playing\n")
+ .appendDescription("**/queue** View the current song queue\n"),
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .setTitle(":game_die: **Game Commands**")
+ .appendDescription("**/d6** Roll a d6 die\n")
+ .appendDescription("**/d8** Roll a d8 die\n")
+ .appendDescription("**/d12** Roll a d12 die\n")
+ .appendDescription("**/d20** Roll a d20 die\n")
+ .appendDescription("**/dice <sides>** Roll a dice with set sides\n"),
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .setTitle(":man_detective: **Self Roles**")
+ .appendDescription("**/addrolespage <title> <description>** Add a page to the /roles command\n")
+ .appendDescription("**/deleterolespage <page>** Remove a page from the /roles command\n")
+ .appendDescription("**/addrole <role> <page>** Add a role to the /roles command\n")
+ .appendDescription("**/deleterole <role> <page>** Remove a role from the /roles command\n")
+ .appendDescription("**/roles** Add self roles to yourself\n"),
+ Ken.getInstance().getDefaultEmbed()
+ .setAuthor("Command List")
+ .setTitle(":underage: **NSFW Commands**")
+ .appendDescription("**/hentai <query>** Retrieves a random hentai image\n")
+ .appendDescription("**/rule34 <query> <page>** Searches on rule34\n")
+ .appendDescription("**/gelbooru <query> <page>** Searches on gelbooru\n")
+ .appendDescription("**/danbooru <query> <page>** Searches on danbooru\n")
+ .appendDescription("**/konachan <query> <page>** Searches on konachan\n")
+ .appendDescription("**/yandere <query> <page>** Searches on yande.re\n")
+ .appendDescription("**/e621 <query> <page>** Searches on e621\n")
+ .appendDescription("**/nhentai <query>** Searches on nhentai\n"),
+ };
}
diff --git a/src/main/java/net/tylermurphy/ken/command/main/Roles.java b/src/main/java/net/tylermurphy/ken/command/main/Roles.java
index 0726b11..0fc482b 100644
--- a/src/main/java/net/tylermurphy/ken/command/main/Roles.java
+++ b/src/main/java/net/tylermurphy/ken/command/main/Roles.java
@@ -2,7 +2,6 @@ package net.tylermurphy.ken.command.main;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.interactions.components.selections.SelectMenu;
import net.tylermurphy.ken.Ken;
import net.tylermurphy.ken.command.Response;
import net.tylermurphy.ken.command.annotation.ButtonCallback;
@@ -23,13 +22,18 @@ public class Roles {
return Response.error("Self roles are currently not setup in this server");
}
int pages = Ken.getInstance().getDatabase().getSelfRoleData().getPages(guild.getIdLong());
- return Response.success(getEmbed(data, 1, pages)).addSecondaryButton("roles", "previous", "Previous").addSecondaryButton("roles", "next", "Next").addDangerButton("roles","exit","Exit").addSelectMenu("roles","select",getRoles(data));
+ return Response.success(getEmbed(data, 1, pages)).addSecondaryButton("roles", "previous", "Previous").addSecondaryButton("roles", "next", "Next").addDangerButton("exit","exit","Exit").addSelectMenu("roles","select",getRoles(data));
+ }
+
+ @ButtonCallback(name="exit")
+ public Response onExit(Message message){
+ return Response.delete();
}
@ButtonCallback(name="roles")
public Response onButton(Guild guild, String id, Message message){
int page;
- if(message == null || id.equals("exit")) return Response.delete();
+ if(message == null) return Response.delete();
if (message.getEmbeds().size() > 0 && message.getEmbeds().get(0) != null) {
page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split("/")[0].substring(5));
} else {
@@ -44,7 +48,7 @@ public class Roles {
if(data==null){
return Response.error("Self roles are currently not setup in this server");
}
- return Response.success(getEmbed(data, page, pages)).addSecondaryButton("roles", "previous", "Previous").addSecondaryButton("roles", "next", "Next").addDangerButton("roles","exit","Exit").addSelectMenu("roles","select",getRoles(data));
+ return Response.success(getEmbed(data, page, pages)).addSecondaryButton("roles", "previous", "Previous").addSecondaryButton("roles", "next", "Next").addDangerButton("exit","exit","Exit").addSelectMenu("roles","select",getRoles(data));
}
@SelectMenuCallback(name="roles")
diff --git a/src/main/java/net/tylermurphy/ken/command/music/Queue.java b/src/main/java/net/tylermurphy/ken/command/music/Queue.java
index b752985..874aa1c 100644
--- a/src/main/java/net/tylermurphy/ken/command/music/Queue.java
+++ b/src/main/java/net/tylermurphy/ken/command/music/Queue.java
@@ -25,7 +25,7 @@ public class Queue {
GuildMusicManager musicManager = playerManager.getGuildMusicManager(guild);
MessageEmbed queue = getQueuePage(musicManager, 1);
if(queue == null){
- return Response.success("Queue is empty");
+ return Response.error("Queue is empty");
}
return Response.success(queue).addSecondaryButton("queue", "previous", "Previous").addSecondaryButton("queue", "next", "Next");
}
@@ -34,23 +34,23 @@ public class Queue {
public Response onButton(String id, Message message, Guild guild){
PlayerManager playerManager = Ken.getInstance().getPlayerManager();
GuildMusicManager musicManager = playerManager.getGuildMusicManager(guild);
- int page, pages;
+ BlockingQueue<AudioTrack> queue = musicManager.scheduler.getQueue();
+ int page;
+ int pages = (queue.size()-1)/10+1;
if (message != null && message.getEmbeds().size() > 0 && message.getEmbeds().get(0) != null) {
page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split("/")[0].substring(5));
- pages = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split("/")[1]);
} else {
page = 0;
- pages = (musicManager.scheduler.getQueue().size()-1)/10+1;
}
if(id.equals("previous"))
page = page - 1 < 1 ? pages : page - 1;
else
page = page + 1 > pages ? 1 : page + 1;
- MessageEmbed queue = getQueuePage(musicManager, page);
- if(queue == null){
+ MessageEmbed embed = getQueuePage(musicManager, page);
+ if(embed == null){
return Response.success("Queue is empty");
}
- return Response.success(queue);
+ return Response.success(embed);
}
private MessageEmbed getQueuePage(GuildMusicManager musicManager, int page){
diff --git a/src/main/java/net/tylermurphy/ken/image/GifFactory.java b/src/main/java/net/tylermurphy/ken/image/GifFactory.java
index f5c754b..193dc41 100644
--- a/src/main/java/net/tylermurphy/ken/image/GifFactory.java
+++ b/src/main/java/net/tylermurphy/ken/image/GifFactory.java
@@ -1,7 +1,7 @@
package net.tylermurphy.ken.image;
import java.awt.image.BufferedImage;
-import java.io.File;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Iterator;
@@ -19,7 +19,7 @@ import net.dv8tion.jda.api.entities.User;
public class GifFactory {
- public static File generateEjectGif(User u) {
+ public static byte[] generateEjectGif(User u) {
String message;
if(Math.random() > .5)
message = u.getName() + " was An Impostor";
@@ -34,9 +34,8 @@ public class GifFactory {
frames[i] = ImageFactory.GenerateEjectFrame(message, Math.min(i, 23), 24, space1, avatar);
}
- int rand = (int)(Math.random()*1000000000);
try {
- return generateFromBI(frames, rand+".gif", 100/12, true);
+ return generateFromBI(frames);
} catch(Exception e) {
e.printStackTrace();
return null;
@@ -44,13 +43,14 @@ public class GifFactory {
}
- private static File generateFromBI(BufferedImage[] images, String output, int delay, boolean loop)
+ private static byte[] generateFromBI(BufferedImage[] images)
throws IIOException, IOException
{
+ System.out.println('e');
ImageWriter gifWriter = getWriter();
- File outfile = new File(output);
- ImageOutputStream ios = ImageIO.createImageOutputStream(outfile);
- IIOMetadata metadata = getMetadata(gifWriter, delay, loop);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
+ IIOMetadata metadata = getMetadata(gifWriter);
gifWriter.setOutput(ios);
gifWriter.prepareWriteSequence(null);
@@ -62,8 +62,8 @@ public class GifFactory {
gifWriter.endWriteSequence();
ios.close();
-
- return outfile;
+ System.out.println('e');
+ return baos.toByteArray();
}
@@ -76,7 +76,7 @@ public class GifFactory {
throw new IIOException("GIF writer doesn't exist on this JVM!");
}
- private static IIOMetadata getMetadata(ImageWriter writer, int delay, boolean loop)
+ private static IIOMetadata getMetadata(ImageWriter writer)
throws IIOInvalidTreeException
{
ImageTypeSpecifier img_type = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB);
@@ -85,12 +85,11 @@ public class GifFactory {
IIOMetadataNode node_tree = (IIOMetadataNode)metadata.getAsTree(native_format);
IIOMetadataNode graphics_node = getNode("GraphicControlExtension", node_tree);
- graphics_node.setAttribute("delayTime", String.valueOf(delay));
+ graphics_node.setAttribute("delayTime", String.valueOf(8));
graphics_node.setAttribute("disposalMethod", "none");
graphics_node.setAttribute("userInputFlag", "FALSE");
- if(loop)
- makeLoopy(node_tree);
+ makeLoopy(node_tree);
metadata.setFromTree(native_format, node_tree);
@@ -104,7 +103,7 @@ public class GifFactory {
app_node.setAttribute("applicationID", "NETSCAPE");
app_node.setAttribute("authenticationCode", "2.0");
- app_node.setUserObject(new byte[]{ 0x1, (byte) (0 & 0xFF), (byte) ((0 >> 8) & 0xFF)});
+ app_node.setUserObject(new byte[]{ 0x1, (byte) (0), (byte) ((0) & 0xFF)});
app_extensions.appendChild(app_node);
root.appendChild(app_extensions);
@@ -112,7 +111,7 @@ public class GifFactory {
private static IIOMetadataNode getNode(String node_name, IIOMetadataNode root)
{
- IIOMetadataNode node = null;
+ IIOMetadataNode node;
for (int i = 0; i < root.getLength(); i++)
{
diff --git a/src/main/java/net/tylermurphy/ken/image/ImageFactory.java b/src/main/java/net/tylermurphy/ken/image/ImageFactory.java
index d666fe1..e70156c 100644
--- a/src/main/java/net/tylermurphy/ken/image/ImageFactory.java
+++ b/src/main/java/net/tylermurphy/ken/image/ImageFactory.java
@@ -60,33 +60,12 @@ public class ImageFactory {
return rotated;
}
- private static BufferedImage makeRoundedCorner(BufferedImage image, int cornerRadius) {
- int w = image.getWidth();
- int h = image.getHeight();
- BufferedImage output = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-
- Graphics2D g2 = output.createGraphics();
-
- g2.setComposite(AlphaComposite.Src);
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setColor(Color.WHITE);
- g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));
-
- g2.setComposite(AlphaComposite.SrcAtop);
- g2.drawImage(image, 0, 0, null);
-
- g2.dispose();
-
- return output;
- }
-
- public static BufferedImage getImageFromURL(String surl) {
+ public static BufferedImage getImageFromURL(String link) {
try {
- final URL url = new URL(surl);
+ final URL url = new URL(link);
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
- final BufferedImage image = ImageIO.read(connection.getInputStream());
- return image;
+ connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0");
+ return ImageIO.read(connection.getInputStream());
} catch (Exception e) {
e.printStackTrace();
return null;