From b8b466dddb8a77f00fdcc7de1bf429f7a8bc3a97 Mon Sep 17 00:00:00 2001 From: Taz03 Date: Tue, 7 Mar 2023 12:36:20 +0530 Subject: [PATCH 1/3] used github api for creating gists --- application/build.gradle | 2 + .../FileSharingMessageListener.java | 191 +++++------------- .../tjbot/features/filesharing/GistFile.java | 8 - .../tjbot/features/filesharing/GistFiles.java | 12 -- .../features/filesharing/GistRequest.java | 10 - .../features/filesharing/GistResponse.java | 34 ---- 6 files changed, 53 insertions(+), 204 deletions(-) delete mode 100644 application/src/main/java/org/togetherjava/tjbot/features/filesharing/GistFile.java delete mode 100644 application/src/main/java/org/togetherjava/tjbot/features/filesharing/GistFiles.java delete mode 100644 application/src/main/java/org/togetherjava/tjbot/features/filesharing/GistRequest.java delete mode 100644 application/src/main/java/org/togetherjava/tjbot/features/filesharing/GistResponse.java diff --git a/application/build.gradle b/application/build.gradle index 9e9a68f325..1b90165b33 100644 --- a/application/build.gradle +++ b/application/build.gradle @@ -73,6 +73,8 @@ dependencies { implementation 'io.github.url-detector:url-detector:0.1.23' implementation 'com.github.ben-manes.caffeine:caffeine:3.1.1' + + implementation 'org.kohsuke:github-api:1.314' testImplementation 'org.mockito:mockito-core:5.1.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0' diff --git a/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java b/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java index 01ae063b97..0e83085eef 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java @@ -1,20 +1,20 @@ package org.togetherjava.tjbot.features.filesharing; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; -import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.interactions.components.ActionRow; import net.dv8tion.jda.api.interactions.components.buttons.Button; +import org.kohsuke.github.GHGist; +import org.kohsuke.github.GHGistBuilder; +import org.kohsuke.github.GitHubBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,18 +28,10 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.regex.Pattern; @@ -48,17 +40,13 @@ * contains a file with the given extension in the * {@link FileSharingMessageListener#extensionFilter}. */ -public class FileSharingMessageListener extends MessageReceiverAdapter implements UserInteractor { - - private static final Logger LOGGER = LoggerFactory.getLogger(FileSharingMessageListener.class); - private static final ObjectMapper JSON = new ObjectMapper(); +public final class FileSharingMessageListener extends MessageReceiverAdapter + implements UserInteractor { + private static final Logger logger = LoggerFactory.getLogger(FileSharingMessageListener.class); private final ComponentIdInteractor componentIdInteractor = new ComponentIdInteractor(getInteractionType(), getName()); - private static final String SHARE_API = "https://api.github.com/gists"; - private static final HttpClient CLIENT = HttpClient.newHttpClient(); - private final String gistApiKey; private final Set extensionFilter = Set.of("txt", "java", "gradle", "xml", "kt", "json", "fxml", "css", "c", "h", "cpp", "py", "yml"); @@ -82,11 +70,8 @@ public FileSharingMessageListener(Config config) { @Override public void onMessageReceived(MessageReceivedEvent event) { User author = event.getAuthor(); - if (author.isBot() || event.isWebhookMessage()) { - return; - } - if (!isHelpThread(event)) { + if (author.isBot() || event.isWebhookMessage() || !isHelpThread(event)) { return; } @@ -104,13 +89,41 @@ public void onMessageReceived(MessageReceivedEvent event) { try { processAttachments(event, attachments); } catch (Exception e) { - LOGGER.error( + logger.error( "Unknown error while processing attachments. Channel: {}, Author: {}, Message ID: {}.", event.getChannel().getName(), author.getId(), event.getMessageId(), e); } }); } + @Override + public void onButtonClick(ButtonInteractionEvent event, List args) { + Member interactionUser = event.getMember(); + String gistAuthorId = args.get(0); + boolean hasSoftModPermissions = + interactionUser.getRoles().stream().map(Role::getName).anyMatch(isSoftModRole); + + if (!gistAuthorId.equals(interactionUser.getId()) && !hasSoftModPermissions) { + event.reply("You do not have permission for this action.").setEphemeral(true).queue(); + return; + } + + Message message = event.getMessage(); + List