summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore19
-rw-r--r--build.gradle.kts17
-rw-r--r--flake.lock27
-rw-r--r--flake.nix21
-rw-r--r--settings.gradle.kts1
-rw-r--r--src/main/java/club/eviltransgenders/bookmark/BookmarksBot.java71
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();
+ }
+ }
+}