diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java index c8a8cd2..32f018a 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java @@ -59,6 +59,9 @@ public class YoshiCommandDistributor { case PAT: command = new PatCommand(context); break; + case BONK: + command = new BonkCommand(context); + break; default: context.getEvent().getTextChannel().sendMessage("Dieses Kommando existiert noch nicht.").queue(); break; @@ -104,7 +107,8 @@ public class YoshiCommandDistributor { */ DELETE, SAUCE, - PAT + PAT, + BONK } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/BonkCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/BonkCommand.java new file mode 100644 index 0000000..22bba04 --- /dev/null +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/BonkCommand.java @@ -0,0 +1,59 @@ +package de.yannicpunktdee.yoshibot.command.commands; + +import de.yannicpunktdee.yoshibot.command.YoshiCommand; +import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; +import de.yannicpunktdee.yoshibot.utils.GifSequenceWriter; +import de.yannicpunktdee.yoshibot.utils.Resources; + +import javax.imageio.ImageIO; +import javax.imageio.stream.FileImageOutputStream; +import javax.imageio.stream.ImageOutputStream; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +public class BonkCommand extends YoshiCommand { + + public BonkCommand(YoshiCommandContext context) { + super(context); + } + + @Override + public boolean execute() { + if(!super.execute()) return false; + + File outFile = new File(Resources.getTempPath() + UUID.randomUUID().toString() + ".gif"); + + try { + BufferedImage inPicture = ImageIO.read(downloadAttachmentToFile(null, null)); + BufferedImage bonk1Picture = ImageIO.read(new File(Resources.getBonkPngPath() + "bonk1.png")); + BufferedImage bonk2Picture = ImageIO.read(new File(Resources.getBonkPngPath() + "bonk2.png")); + BufferedImage frame1 = getOutFrame(bonk1Picture, inPicture, 615, 155, 185, 345); + ImageOutputStream output = new FileImageOutputStream(outFile); + GifSequenceWriter writer = new GifSequenceWriter(output, frame1.getType(), 100, true); + writer.writeToSequence(frame1); + writer.writeToSequence(getOutFrame(bonk2Picture, inPicture, 455, 155, 345, 345)); + writer.close(); + output.close(); + } catch (IOException e) { + sendMessage("GIF konnte nicht erstellt werden."); + return false; + } + + context.getEvent().getTextChannel().sendFile(outFile).queue(); + + return true; + } + + private BufferedImage getOutFrame(BufferedImage bonkDogGraphics, BufferedImage personGraphics, int x, int y, int width, int height){ + BufferedImage outFrame = new BufferedImage(800, 500, BufferedImage.TYPE_INT_RGB); + Graphics2D g = outFrame.createGraphics(); + g.setColor(Color.black); + g.drawImage(personGraphics, x, y, width, height, null); + g.drawImage(bonkDogGraphics, 0, 0, 680, 412, null); + return outFrame; + } + +} diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/Resources.java b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/Resources.java index e4395ea..cc45e57 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/Resources.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/Resources.java @@ -39,6 +39,8 @@ public final class Resources { private static String patPngPath; @Getter private static String imagePath; + @Getter + private static String bonkPngPath; @Getter private static String jda_builder_string; @@ -77,6 +79,7 @@ public final class Resources { if (isOk) isOk = initTagFilter(); if (isOk) isOk = initPatPngPath(); if (isOk) isOk = initImages(); + if (isOk) isOk = initBonkPngPath(); if (isOk) Logger.logInfo("Die Konfigurationen wurden erfolgreich geladen."); else Logger.logError("Die Konfiguration konnte nicht geladen werden"); @@ -174,6 +177,11 @@ public final class Resources { patPngPath = verifyExists(resourcePath + "pats/", File::isDirectory); return patPngPath != null; } + + private static boolean initBonkPngPath() { + bonkPngPath = verifyExists(resourcePath + "bonks/", File::isDirectory); + return bonkPngPath != null; + } private static boolean initGuildId() { if (!propertiesFile.containsKey("guild_id")) { diff --git a/rsc/bonks/bonk1.png b/rsc/bonks/bonk1.png new file mode 100644 index 0000000..fd099e1 Binary files /dev/null and b/rsc/bonks/bonk1.png differ diff --git a/rsc/bonks/bonk2.png b/rsc/bonks/bonk2.png new file mode 100644 index 0000000..0d1c650 Binary files /dev/null and b/rsc/bonks/bonk2.png differ