// DeepL Auto-Translator für Habbo // Übersetzt alle ausgehenden deutschen Nachrichten automatisch ins Englische // // SETUP: Hole deinen kostenlosen DeepL API Key von https://www.deepl.com/pro-api // Kostenlos bis 500.000 Zeichen pro Monat! using System; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; using System.Text; using System.Linq; // ===== KONFIGURATION ===== var apiKey = "8ce0286b-0eb3-468f-88b3-53f244cc4f3b:fx"; // DeepL API Key hier eintragen var sourceLang = "DE"; // Quellsprache (DE = Deutsch) var targetLang = "EN"; // Zielsprache (EN = Englisch) var showOriginal = true; // Original im Log anzeigen? var minLength = 2; // Mindestlänge für Übersetzung // ========================= var httpClient = new HttpClient(); var isProcessing = false; // DeepL API Endpunkt (kostenlose Version) var deeplUrl = "https://api-free.deepl.com/v2/translate"; // Für Pro Version stattdessen: "https://api.deepl.com/v2/translate" async Task TranslateText(string text) { try { var content = new FormUrlEncodedContent(new[] { new KeyValuePair("auth_key", apiKey), new KeyValuePair("text", text), new KeyValuePair("source_lang", sourceLang), new KeyValuePair("target_lang", targetLang) }); var response = await httpClient.PostAsync(deeplUrl, content); var responseString = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { Log($"DeepL Error: {response.StatusCode} - {responseString}"); return null; } var json = JsonSerializer.Deserialize(responseString); if (json.TryGetProperty("translations", out var translations) && translations.GetArrayLength() > 0) { var translated = translations[0].GetProperty("text").GetString(); return translated; } return null; } catch (Exception ex) { Log($"Translation Error: {ex.Message}"); return null; } } // Chat Nachrichten abfangen (Talk) OnIntercept(Out["Chat"], async e => { if (isProcessing) return; var message = e.Packet.ReadString(); var bubble = e.Packet.ReadInt(); var trackingId = e.Packet.ReadInt(); // Kurze Nachrichten oder Befehle ignorieren if (message.Length < minLength || message.StartsWith(":") || message.StartsWith("/")) return; e.Block(); isProcessing = true; if (showOriginal) Log($"Original: {message}"); var translated = await TranslateText(message); if (!string.IsNullOrEmpty(translated) && translated != message) { Log($"Translated: {translated}"); Send(Out["Chat"], translated, bubble, trackingId); } else { // Bei Fehler Original senden Send(Out["Chat"], message, bubble, trackingId); } isProcessing = false; }); // Shout Nachrichten abfangen OnIntercept(Out["Shout"], async e => { if (isProcessing) return; var message = e.Packet.ReadString(); var bubble = e.Packet.ReadInt(); if (message.Length < minLength || message.StartsWith(":") || message.StartsWith("/")) return; e.Block(); isProcessing = true; if (showOriginal) Log($"Original (Shout): {message}"); var translated = await TranslateText(message); if (!string.IsNullOrEmpty(translated) && translated != message) { Log($"Translated: {translated}"); Send(Out["Shout"], translated, bubble); } else { Send(Out["Shout"], message, bubble); } isProcessing = false; }); // Whisper Nachrichten abfangen OnIntercept(Out["Whisper"], async e => { if (isProcessing) return; var target = e.Packet.ReadString(); var message = e.Packet.ReadString(); var bubble = e.Packet.ReadInt(); if (message.Length < minLength || message.StartsWith(":") || message.StartsWith("/")) return; e.Block(); isProcessing = true; if (showOriginal) Log($"Original (Whisper to {target}): {message}"); var translated = await TranslateText(message); if (!string.IsNullOrEmpty(translated) && translated != message) { Log($"Translated: {translated}"); Send(Out["Whisper"], target, translated, bubble); } else { Send(Out["Whisper"], target, message, bubble); } isProcessing = false; }); Log("================================="); Log("DeepL Translator aktiviert!"); Log($"Übersetzt: {sourceLang} -> {targetLang}"); Log("Befehle mit : oder / werden ignoriert"); Log("================================="); Wait();