mirror of
https://github.com/watn3y/steamsalty.git
synced 2025-10-25 09:51:02 +02:00
Some checks failed
Build and Push to Docker Hub on push to any branch / docker (push) Has been cancelled
108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
package deepl
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
"watn3y/steamsalty/config"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var client *apiClient
|
|
|
|
var SourceLanguages map[string]string
|
|
var TargetLanguages map[string]string
|
|
|
|
func Init() {
|
|
log.Info().Msg("Translation is enabled, creating HTTP client for DeepL API")
|
|
baseURL := baseURLPro
|
|
if config.BotConfig.DeepLFreeTier {
|
|
baseURL = baseURLFree
|
|
}
|
|
|
|
client = &apiClient{
|
|
authKey: config.BotConfig.DeepLAPIKey,
|
|
baseURL: baseURL,
|
|
httpClient: &http.Client{Timeout: 30 * time.Second},
|
|
}
|
|
|
|
err := getAndValidateLanguages()
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to set up languages")
|
|
}
|
|
}
|
|
|
|
func Translate(text string) (translatedText string, sourceLanguage string, err error) {
|
|
log.Debug().Str("text", text).Msg("Starting translation")
|
|
req := translateRequest{
|
|
Text: []string{text},
|
|
TargetLang: config.BotConfig.TranslateLanguage,
|
|
}
|
|
|
|
body, err := json.Marshal(req)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to ")
|
|
return "", "", err
|
|
}
|
|
|
|
respBody, err := post("/translate", body)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to make DeepL API request")
|
|
return "", "", err
|
|
}
|
|
|
|
var result translateResponse
|
|
err = json.Unmarshal(respBody, &result)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to parse DeepL API response")
|
|
return "", "", err
|
|
}
|
|
|
|
return result.Translations[0].Text, result.Translations[0].DetectedSourceLanguage, nil
|
|
}
|
|
|
|
func getAndValidateLanguages() (err error) {
|
|
log.Info().Msg("Setting up supported languages")
|
|
respBody, err := get("/languages?type=source")
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to make DeepL API request")
|
|
return err
|
|
}
|
|
|
|
var parsedResp languagesResponse
|
|
err = json.Unmarshal(respBody, &parsedResp)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to parse DeepL API response")
|
|
return err
|
|
}
|
|
|
|
SourceLanguages = make(map[string]string)
|
|
for _, l := range parsedResp {
|
|
SourceLanguages[l.Language] = l.Name
|
|
}
|
|
|
|
respBody, err = get("/languages?type=target")
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to make DeepL API request")
|
|
return err
|
|
}
|
|
|
|
err = json.Unmarshal(respBody, &parsedResp)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to parse DeepL API response")
|
|
return err
|
|
}
|
|
|
|
TargetLanguages = make(map[string]string)
|
|
for _, l := range parsedResp {
|
|
TargetLanguages[l.Language] = l.Name
|
|
}
|
|
|
|
if _, ok := TargetLanguages[config.BotConfig.TranslateLanguage]; !ok {
|
|
return fmt.Errorf("Selected language not supported by DeepL")
|
|
}
|
|
|
|
return nil
|
|
}
|