diff options
| -rw-r--r-- | .gitignore | 19 | ||||
| -rw-r--r-- | build.gradle.kts | 17 | ||||
| -rw-r--r-- | flake.lock | 27 | ||||
| -rw-r--r-- | flake.nix | 21 | ||||
| -rw-r--r-- | settings.gradle.kts | 1 | ||||
| -rw-r--r-- | src/main/java/club/eviltransgenders/bookmark/BookmarksBot.java | 71 |
6 files changed, 156 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ddb9b8c --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Gradle +/.gradle +/build + +# JDTLS +.classpath +.factorypath +.settings +.project +bin + +# Java +*.hprof + +# direnv +/.direnv +/.envrc + +/run diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..ab3cd38 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + application + id("com.gradleup.shadow") version "9.4.1" +} + +application.mainClass = "club.eviltransgenders.bookmark.BookmarksBot" +group = "club.eviltransgenders" +version = "0.1.0" + +repositories { + mavenCentral() +} + +dependencies { + implementation("ch.qos.logback:logback-classic:1.5.32") + implementation("net.dv8tion:JDA:6.4.1") +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6207cbb --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1778443072, + "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2df51e8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,21 @@ +{ + description = "Java dev flake"; + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + outputs = + { self, nixpkgs }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in + { + devShells.${system}.default = pkgs.mkShellNoCC { + nativeBuildInputs = with pkgs; [ + gradle_9 + jdk21 + jdt-language-server + ]; + }; + + formatter.${system} = pkgs.nixfmt; + }; +} diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..79c96b8 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "bookmark-messages" diff --git a/src/main/java/club/eviltransgenders/bookmark/BookmarksBot.java b/src/main/java/club/eviltransgenders/bookmark/BookmarksBot.java new file mode 100644 index 0000000..f5e7ca9 --- /dev/null +++ b/src/main/java/club/eviltransgenders/bookmark/BookmarksBot.java @@ -0,0 +1,71 @@ +package club.eviltransgenders.bookmark; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent; +import net.dv8tion.jda.api.events.session.ReadyEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.commands.build.Commands; +import net.dv8tion.jda.api.interactions.commands.Command; +import net.dv8tion.jda.api.interactions.commands.Command.Type; +import net.dv8tion.jda.api.interactions.IntegrationType; +import net.dv8tion.jda.api.interactions.InteractionContextType; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class BookmarksBot extends ListenerAdapter { + private static final Logger LOGGER = LoggerFactory.getLogger(BookmarksBot.class); + public static void main(String[] args) throws InterruptedException { + LOGGER.info("Starting bookmarks bot..."); + String token = System.getenv("DISCORD_TOKEN"); + if (token == null) { + LOGGER.error("Token not provided in environment (set DISCORD_TOKEN)"); + return; + } + + JDABuilder.createLight(token, GatewayIntent.MESSAGE_CONTENT) + .addEventListeners(new BookmarksBot()) + .build() + .awaitShutdown(); + } + + @Override + public void onReady(ReadyEvent event) { + // Register commands + event.getJDA().retrieveCommands().queue(list -> { + for (Command cmd : list) { + if (cmd.getName().equals("Bookmark Message")) { + LOGGER.info("bookmark message already registered"); + return; + } + } + + event.getJDA() + .updateCommands() + .addCommands(Commands.context(Type.MESSAGE, "Bookmark Message") + .setIntegrationTypes(IntegrationType.USER_INSTALL)) + .queue(blah -> LOGGER.info("Registered context menu command!")); + }); + } + + @Override + public void onMessageContextInteraction(MessageContextInteractionEvent event) { + if (event.getName().equals("Bookmark Message")) { + event.getUser().openPrivateChannel().queue(channel -> { + Message target = event.getTarget(); + channel.sendMessage(new MessageCreateBuilder().setContent(target.getJumpUrl()) + .setEmbeds(new EmbedBuilder() + .setAuthor(target.getAuthor().getName(), null, target.getAuthor().getAvatarUrl()) + .setDescription(target.getContentRaw()) + .build() + ).build()).queue(); + }); + + event.reply("Message bookmarked!").setEphemeral(true).queue(); + } + } +} |
