xabbo-scripts/Scripts/DeepL-Translator.csx
Administrator 7a548130a3 Move all scripts into Scripts/ subfolder
Keeps the repo root clean - only README.md visible on landing page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:49:37 +01:00

172 lines
4.8 KiB
C#

// 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<string> TranslateText(string text)
{
try
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("auth_key", apiKey),
new KeyValuePair<string, string>("text", text),
new KeyValuePair<string, string>("source_lang", sourceLang),
new KeyValuePair<string, string>("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<JsonElement>(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();