From b0e9f1bb4e105fbc0cd7861a2bc833490a5921dd Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Sat, 5 Apr 2025 01:00:59 +0200 Subject: [PATCH] feat: public chat is now emote-only --- .../clientserver/common/MistralDirectAPI.java | 37 ++++++++++++++----- .../clientserver/server/MessageProcessor.java | 20 +++++++++- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/clientserver/common/MistralDirectAPI.java b/app/src/main/java/clientserver/common/MistralDirectAPI.java index 65bc0bc..09ed2fe 100644 --- a/app/src/main/java/clientserver/common/MistralDirectAPI.java +++ b/app/src/main/java/clientserver/common/MistralDirectAPI.java @@ -10,10 +10,9 @@ import java.util.Properties; public class MistralDirectAPI { - public static void main(String[] args) { - String apiKey; + private static String apiKey; - // Load API key from properties file + static { try { Properties props = new Properties(); FileInputStream input = new FileInputStream("config.properties"); @@ -22,18 +21,22 @@ public class MistralDirectAPI { input.close(); } catch (IOException e) { System.err.println("Could not load API key: " + e.getMessage()); - return; } + } - String payload = + public static String translateToEmojis(String message) { + String payload = String.format( """ { "model": "mistral-medium", "messages": [ - { "role": "user", "content": "Reverse turing test." } + { "role": "system", "content": "Please translate the following message to emojis only. Do not include any comments. End the emoji message with ;" }, + { "role": "user", "content": "%s" } ] } - """; + """, + message + ); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.mistral.ai/v1/chat/completions")) @@ -49,10 +52,26 @@ public class MistralDirectAPI { request, HttpResponse.BodyHandlers.ofString() ); - System.out.println("Response Code: " + response.statusCode()); - System.out.println("Response Body: " + response.body()); + String responseBody = response.body(); + return extractContent(responseBody); } catch (IOException | InterruptedException e) { System.err.println("Error occurred: " + e.getMessage()); + return message; } } + + private static String extractContent(String jsonResponse) { + // Find the content field in the response + int contentIndex = jsonResponse.indexOf("\"content\":\""); + if (contentIndex != -1) { + int startIndex = contentIndex + "\"content\":\"".length(); + + int endIndex = jsonResponse.indexOf(";", startIndex); + + if (endIndex != -1) { + return jsonResponse.substring(startIndex, endIndex); + } + } + return ""; + } } diff --git a/app/src/main/java/clientserver/server/MessageProcessor.java b/app/src/main/java/clientserver/server/MessageProcessor.java index a5f0179..0c1c292 100644 --- a/app/src/main/java/clientserver/server/MessageProcessor.java +++ b/app/src/main/java/clientserver/server/MessageProcessor.java @@ -1,6 +1,7 @@ package clientserver.server; import clientserver.client.Client; +import clientserver.common.MistralDirectAPI; import java.net.DatagramSocket; public class MessageProcessor { @@ -44,7 +45,7 @@ public class MessageProcessor { break; default: // Broadcast message to all clients - broadcastMessage(message); + broadcastMessageEmoji(message); break; } } @@ -113,6 +114,23 @@ public class MessageProcessor { } } + private void broadcastMessageEmoji(String message) { + // Translate message to emojis + String emojiMessage = MistralDirectAPI.translateToEmojis(message); + String formattedMessage = + "> " + client.getPseudo() + ": " + emojiMessage; + + for (ClientHandler handler : Server.getAllClientHandlers()) { + Client targetClient = handler.getClient(); + Server.sendMessage( + clientHandlerSocket, + formattedMessage, + targetClient.getAddress(), + targetClient.getPort() + ); + } + } + private void handleMsgCommand() { Server.sendMessage( clientHandlerSocket,