aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-12-28 19:44:52 -0800
committerPinapelz <yukais@pinapelz.com>2025-12-28 19:44:52 -0800
commitfbe9b9eb7a462b42f235d100811b377659101b3c (patch)
tree0a1232f4b9e41a697c4cd066124a8a28a1e7e031 /src
parentbe26d198646b28100c0e983af9d8e10545575dbe (diff)
implement basic file retrieval
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/pinapelz/Database.java31
-rw-r--r--src/main/java/com/pinapelz/FileSystem.java6
-rw-r--r--src/main/java/com/pinapelz/Main.java13
-rw-r--r--src/main/java/com/pinapelz/MessageListener.java6
-rw-r--r--src/main/java/com/pinapelz/Retriever.java34
-rw-r--r--src/main/java/com/pinapelz/frontend/App.kt20
6 files changed, 97 insertions, 13 deletions
diff --git a/src/main/java/com/pinapelz/Database.java b/src/main/java/com/pinapelz/Database.java
index 41d5257..7116328 100644
--- a/src/main/java/com/pinapelz/Database.java
+++ b/src/main/java/com/pinapelz/Database.java
@@ -57,4 +57,35 @@ public class Database {
ps.executeUpdate();
}
+
+ public String[] getFileById(int fileId) {
+ String sql = """
+ SELECT
+ disc_channel_id,
+ disc_message_id,
+ file_name
+ FROM files
+ WHERE file_id = ?
+ """;
+
+ try (PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setInt(1, fileId);
+
+ try (ResultSet rs = ps.executeQuery()) {
+ if (!rs.next()) {
+ throw new RuntimeException("File not found for id=" + fileId);
+ }
+
+ String channelId = rs.getString("disc_channel_id");
+ String messageId = rs.getString("disc_message_id");
+ String fileName = rs.getString("file_name");
+
+ return new String[]{ channelId, messageId, fileName };
+ }
+
+ } catch (SQLException e) {
+ throw new RuntimeException("Failed to fetch file metadata", e);
+ }
+ }
+
}
diff --git a/src/main/java/com/pinapelz/FileSystem.java b/src/main/java/com/pinapelz/FileSystem.java
index 61b1bd6..1f252a2 100644
--- a/src/main/java/com/pinapelz/FileSystem.java
+++ b/src/main/java/com/pinapelz/FileSystem.java
@@ -10,7 +10,11 @@ public class FileSystem {
database = new Database(dbHost, dbUser, dbPass, dbName);
}
- public void createNewFile(String messageId, String channelId, String description, Message.Attachment attachment){
+ public String[] getFileById(int fileId){
+ return database.getFileById(fileId);
+ }
+
+ public void createNewFile(String channelId, String messageId, String description, Message.Attachment attachment){
int fileSize = attachment.getSize();
String filename = attachment.getFileName();
String mimeType = attachment.getContentType();
diff --git a/src/main/java/com/pinapelz/Main.java b/src/main/java/com/pinapelz/Main.java
index 9090160..40b0feb 100644
--- a/src/main/java/com/pinapelz/Main.java
+++ b/src/main/java/com/pinapelz/Main.java
@@ -1,6 +1,7 @@
package com.pinapelz;
import io.github.cdimascio.dotenv.Dotenv;
+import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.requests.GatewayIntent;
@@ -9,6 +10,7 @@ import static com.pinapelz.frontend.AppKt.startFrontend;
public class Main
{
private static final Dotenv dotenv = Dotenv.load();
+ private static FileSystem fileSystem;
public static String readSetting(String parameter) {
String value = System.getenv(parameter);
@@ -16,20 +18,21 @@ public class Main
return dotenv.get(parameter);
}
- public static void startBot(){
+ public static JDA startBot(){
String dbHost = readSetting("PGHOST");
String dbUser = readSetting("PGUSER");
String dbPass = readSetting("PGPASSWORD");
String dbName = readSetting("PGDATABASE");
- JDABuilder.createDefault(readSetting("BOT_TOKEN"))
- .addEventListeners(new MessageListener(dbHost, dbUser, dbPass, dbName))
+ fileSystem = new FileSystem(dbHost, dbUser, dbPass, dbName);
+ return JDABuilder.createDefault(readSetting("BOT_TOKEN"))
+ .addEventListeners(new MessageListener(fileSystem))
.enableIntents(GatewayIntent.MESSAGE_CONTENT)
.build();
}
public static void main(String[] args) throws Exception{
- startBot();
- startFrontend();
+ JDA jda = startBot();
+ startFrontend(new Retriever(jda), fileSystem);
}
diff --git a/src/main/java/com/pinapelz/MessageListener.java b/src/main/java/com/pinapelz/MessageListener.java
index 642d484..3922c51 100644
--- a/src/main/java/com/pinapelz/MessageListener.java
+++ b/src/main/java/com/pinapelz/MessageListener.java
@@ -9,9 +9,9 @@ public class MessageListener extends ListenerAdapter {
private FileSystem fileSystem;
- public MessageListener(String dbHost, String dbUser, String dbPass, String dbName){
- fileSystem = new FileSystem(dbHost, dbUser, dbPass, dbName);
+ public MessageListener(FileSystem fileSystem){
+ this.fileSystem = fileSystem;
}
@Override
@@ -25,7 +25,7 @@ public class MessageListener extends ListenerAdapter {
if(!message.getAttachments().isEmpty()){
System.out.println("Attachment Received! Filing this away now...");
for(Message.Attachment attachment : message.getAttachments()){
- fileSystem.createNewFile(message.getChannelId(), message.getChannelId(), content, attachment);
+ fileSystem.createNewFile(message.getChannelId(), message.getId(), content, attachment);
}
}
diff --git a/src/main/java/com/pinapelz/Retriever.java b/src/main/java/com/pinapelz/Retriever.java
new file mode 100644
index 0000000..1d78785
--- /dev/null
+++ b/src/main/java/com/pinapelz/Retriever.java
@@ -0,0 +1,34 @@
+package com.pinapelz;
+
+import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.entities.Message;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+
+import java.util.concurrent.CompletableFuture;
+
+public class Retriever {
+
+ private final JDA jda;
+
+ public Retriever(JDA jda) {
+ this.jda = jda;
+ }
+
+ public String getFileUrl(String channelId, String messageId, String fileName) {
+ TextChannel channel = jda.getTextChannelById(channelId);
+ if (channel == null) {
+ throw new RuntimeException("Channel not found or deleted");
+ }
+ System.out.println(channelId + " " + messageId + fileName);
+
+ Message message = channel.retrieveMessageById(messageId).complete();
+
+ for (Message.Attachment file : message.getAttachments()) {
+ if (file.getFileName().equals(fileName)) {
+ return file.getUrl();
+ }
+ }
+
+ throw new RuntimeException("Matching attachment not found");
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/pinapelz/frontend/App.kt b/src/main/java/com/pinapelz/frontend/App.kt
index 4a19793..ab176da 100644
--- a/src/main/java/com/pinapelz/frontend/App.kt
+++ b/src/main/java/com/pinapelz/frontend/App.kt
@@ -1,9 +1,21 @@
package com.pinapelz.frontend
import io.javalin.Javalin
+import io.javalin.http.staticfiles.Location
+import com.pinapelz.Retriever
+import com.pinapelz.FileSystem
-fun startFrontend() {
- val app = Javalin.create()
- .get("/") { ctx -> ctx.result("WIP. Not much here yet") }
- .start(7070)
+fun startFrontend(retriever: Retriever, fileSystem: FileSystem) {
+ val app = Javalin.create {
+ it.staticFiles.add("/public", Location.CLASSPATH)
+ }
+ app.get("/fetch") { ctx ->
+ val fileId = ctx.queryParam("fileId")
+ val fileMetadata = fileSystem.getFileById(Integer.parseInt(fileId));
+ print(fileMetadata[1])
+ ctx.html(retriever.getFileUrl(fileMetadata[0], fileMetadata[1], fileMetadata[2]));
+
+
+ }
+ app.start(7070)
} \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage