Full refactor of the image listener
This commit is contained in:
parent
3f7d79a11e
commit
361e5e8a5d
@ -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:"));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user