Full refactor of the image listener

This commit is contained in:
Aleksei 2020-02-25 15:34:15 -05:00
parent 3f7d79a11e
commit 361e5e8a5d

View File

@ -9,17 +9,25 @@ import com.rethinkdb.RethinkDB;
import com.rethinkdb.net.Connection; import com.rethinkdb.net.Connection;
import com.rethinkdb.net.Cursor; import com.rethinkdb.net.Cursor;
import com.vdurmont.emoji.EmojiParser; import com.vdurmont.emoji.EmojiParser;
import dev.salmonllama.fsbot.database.controllers.GalleryController;
import dev.salmonllama.fsbot.database.controllers.OutfitController;
import dev.salmonllama.fsbot.database.models.Outfit;
import dev.salmonllama.fsbot.endpoints.imgur.ImgurAPIConnection;
import okhttp3.*; import okhttp3.*;
import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.Message;
import org.javacord.api.entity.message.MessageAttachment; import org.javacord.api.entity.message.MessageAttachment;
import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.message.embed.EmbedBuilder;
import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.listener.message.MessageCreateListener;
import org.javacord.api.util.logging.ExceptionLogger;
import org.json.JSONObject; import org.json.JSONObject;
import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.config.BotConfig;
import java.awt.*; import java.awt.*;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class ImageListener implements MessageCreateListener { public class ImageListener implements MessageCreateListener {
@ -33,125 +41,53 @@ public class ImageListener implements MessageCreateListener {
@Override @Override
public void onMessageCreate(MessageCreateEvent event) { // TODO: This needs immediate help public void onMessageCreate(MessageCreateEvent event) { // TODO: This needs immediate help
// Check for valid source -> DONE
// Check for gallery channel presence
// Check for images (attached files and links from approved sources)
// Upload the image(s) to imgur
// Store the image in the database
// Send confirmation && log event
// event.getMessage().getUserAuthor().ifPresent(author -> { if (!event.getMessageAuthor().isRegularUser()) {
// if (author.isBot()) { // Ignore anything that is a webhook or a bot message
// return; return;
// } }
// });
// Message message = event.getMessage(); // Only works in Server Text Channels
// String channel = event.getChannel().getIdAsString(); event.getChannel().asServerTextChannel().ifPresent(channel -> {
// String submitter = event.getMessage().getAuthor().getIdAsString(); // Only works in registered Gallery Channels
GalleryController.galleryExists(channel.getIdAsString()).thenAccept(exists -> {
if (exists) {
// Check the message for images
if (event.getMessageAttachments().stream().anyMatch(MessageAttachment::isImage)) {
// Upload the image(s) to Imgur, store in database, log the stored images.
ImgurAPIConnection imgur = new ImgurAPIConnection();
// if (message.getAttachments().stream().noneMatch(MessageAttachment::isImage)) { event.getMessageAttachments()
// return; .stream()
// } .filter(MessageAttachment::isImage)
.forEach(image -> {
// Upload to Imgur
imgur.uploadImage(image.getUrl().toString()).thenAccept(upload -> {
// Store in the database
Outfit.OutfitBuilder outfitBuilder = new Outfit.OutfitBuilder()
.setId(upload.getId())
.setLink(upload.getLink())
.setSubmitter(event.getMessageAuthor().getIdAsString())
.setCreated(new Timestamp(upload.getDateTime()));
// // If the message contains an image, check if the channel is being listened to for image storage GalleryController.getTag(channel.getIdAsString()).thenAccept(outfitBuilder::setTag).join();
// String dbTable = null; Outfit outfit = outfitBuilder.build();
OutfitController.insert(outfit).join();
// if(r.db("fsbot").table("channels").g("cId").contains(channel).run(conn)) { // Log the event
// Cursor cursor = r.db("fsbot") // event.getChannel().sendMessage("Outfit stored: " + outfit.toString()); // TODO: Logging. Log this to OutfitLog
// .table("channels") }).exceptionally(ExceptionLogger.get());
// .filter(row -> row.getField("cId").eq(channel)) });
// .getField("tag") }
// .run(conn); }
}).exceptionally(ExceptionLogger.get());
// List tags = cursor.toList(); });
// for (Object tag : tags) {
// dbTable = tag.toString();
// }
// }
// else {
// return;
// }
// List<MessageAttachment> attachments = message.getAttachments();
// for (MessageAttachment attachment : attachments) {
// String discordLink = attachment.getUrl().toString();
// String imgurLink = null;
// // Upload the image to imgur
// try {
// OkHttpClient client = new OkHttpClient();
// MediaType mediaType = MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
// RequestBody body = RequestBody.create(
// mediaType,
// String.format("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"image\"\r\n\r\n%s\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", discordLink));
// Request request = new Request.Builder()
// .url("https://api.imgur.com/3/image")
// .method("POST", body)
// .header("Authorization", BotConfig.IMGUR_ID)
// .header("Authorization", BotConfig.IMGUR_BEARER)
// .build();
// Response response = client.newCall(request).execute();
// if (response.body() == null) {
// event.getChannel().sendMessage("Something went wrong!");
// return;
// }
// String jsonData = response.body().string();
// imgurLink = new JSONObject(jsonData).getJSONObject("data").getString("link");
// if (imgurLink == null) {
// event.getChannel().sendMessage("Something went wrong!");
// return;
// }
// }
// catch (Exception e) {
// e.printStackTrace();
// }
// r.db("fsbot").table("outfits").insert(
// r.hashMap("link", imgurLink)
// .with("submitter", submitter)
// .with("tag", dbTable)
// ).run(conn);
// final String finalLink = imgurLink;
// Cursor imgId = r.db("fsbot")
// .table("outfits")
// .filter(row -> row.getField("link").eq(finalLink))
// .getField("id")
// .run(conn);
// String embedId = null;
// List imgIds = imgId.toList();
// for (Object id : imgIds) {
// embedId = id.toString();
// }
// EmbedBuilder embed = new EmbedBuilder()
// .setTitle("Added an entry of tag " + dbTable)
// .setColor(Color.GREEN)
// .setThumbnail(imgurLink)
// .setAuthor("Placeholder")
// .setFooter(embedId);
// event.getApi().getUserById(submitter).thenAccept(user -> embed.setAuthor(user.getDiscriminatedName()));
// event.getApi().getChannelById(BotConfig.OUTFIT_LOG).ifPresent(chnl -> {
// chnl.asTextChannel().ifPresent(txtchnl -> {
// txtchnl.sendMessage(embed).join();
// });
// });
// if (dbTable.equals("disaster")) {
// // Add custom panda emoji: <:PandaWut:433045737245376522>
// message.addReaction("PandaWut:433045737245376522");
// }
// message.addReaction(EmojiParser.parseToUnicode(":heartpulse:"));
// }
} }
} }