RC-1.0
Some checks failed
release-tag / release-image (push) Has been cancelled

This commit is contained in:
2025-08-12 19:40:12 +02:00
parent e6fbaa1e49
commit d944d19193
3 changed files with 129 additions and 27 deletions

View File

@@ -15,10 +15,10 @@ FROM alpine:3.22
RUN apk add --no-cache ca-certificates
#RUN mkdir /data
#RUN mkdir /dynamicsrc
#RUN mkdir /tempsrc
RUN mkdir /tempsrc
COPY --from=builder /bin/autovoice /bin/autovoice
#COPY ./static /data/static
# COPY ./static /tempsrc/static
COPY ./language.json /tempsrc/language.json
#COPY ./dynamicsrc /dynamicsrc
# Default listens on :8080 siehe main.go

View File

@@ -6,14 +6,110 @@
"system.default.lobbyname": " Erstelle privaten Raum",
"system.default.category": "Private Räume",
"system.log.initdb.01": "Datenbank-Fehler: %v",
"system.log.initdb.02": "Fehler beim Erstellen der Tabelle: %v"
"system.log.initdb.02": "Fehler beim Erstellen der Tabelle: %v",
"response.voicechannel.created": "✅ Voice-Channel **%s** erstellt.",
"response.voicechannel.created.notinvoice": " Du bist aktuell in keinem Voice-Channel; join bitte manuell in deinen neuen Raum.",
"response.voicechannel.created.move": " Ich verschiebe dich jetzt dort hinein.",
"response.setlobby.onlyadmins": "❌ Nur Administratoren dürfen das.",
"response.setlobby.pleaseentername": "Bitte gib einen Namen an.",
"response.setlobby.error.saving": "⚠️ Lobby-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
"response.setlobby.success": "✅ Lobby-Name aktualisiert auf: %s",
"response.setcategory.onlyadmins": "❌ Nur Administratoren dürfen das.",
"response.setcategory.error.name":"Bitte gib einen Namen an.",
"response.setcategory.error.saving": "⚠️ Kategorie-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
"response.setcategory.success": "✅ Kategorie-Name aktualisiert auf: %s",
"response.settimeout.onlyadmins": "❌ Nur Administratoren dürfen das.",
"response.settimeout.error.saving": "⚠️ Timeout gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
"response.settimeout.success": "✅ Timeout auf %d Minuten gesetzt.",
"response.adduser.error.user": "Bitte gib ein gültiges Mitglied an.",
"response.adduser.error.notinvoice": "Du bist aktuell in keinem Voice-Channel. Betritt zuerst deinen privaten Channel.",
"response.adduser.error.notowner": "❌ Du bist nicht der Besitzer dieses Channels oder dir fehlen Rechte (Manage Channel).",
"response.adduser.error.setpermissions": "Konnte Berechtigung nicht setzen: %v",
"response.adduser.success": "✅ %s hat jetzt Zugriff auf deinen Voice-Channel."
}
},
{
"language": "en",
"messages": {
"hello": "Hallo, %s!",
"goodbye": "Tschüss, %s!"
"system.default.lobbyname": " Create private room",
"system.default.category": "Private Rooms",
"system.log.initdb.01": "Database error: %v",
"system.log.initdb.02": "Error creating table: %v",
"response.voicechannel.created": "✅ Voice channel **%s** created.",
"response.voicechannel.created.notinvoice": " You are currently not in a voice channel; please manually join your new room.",
"response.voicechannel.created.move": " I will now move you there.",
"response.setlobby.onlyadmins": "❌ Only administrators are allowed to do this.",
"response.setlobby.pleaseentername": "Please enter a name.",
"response.setlobby.error.saving": "⚠️ Lobby name set, but saving failed. Check the logs.",
"response.setlobby.success": "✅ Lobby name updated to: %s",
"response.setcategory.onlyadmins": "❌ Only administrators are allowed to do this.",
"response.setcategory.error.name":"Please enter a name.",
"response.setcategory.error.saving": "⚠️ Category name set, but saving failed. Check the logs.",
"response.setcategory.success": "✅ Category name updated to: %s",
"response.settimeout.onlyadmins": "❌ Only administrators are allowed to do this.",
"response.settimeout.error.saving": "⚠️ Timeout set, but saving failed. Check the logs.",
"response.settimeout.success": "✅ Timeout set to %d minutes.",
"response.adduser.error.user": "Please enter a valid member.",
"response.adduser.error.notinvoice": "You are currently not in a voice channel. Please join your private channel first.",
"response.adduser.error.notowner": "❌ You are not the owner of this channel or you lack permissions (Manage Channel).",
"response.adduser.error.setpermissions": "Could not set permissions: %v",
"response.adduser.success": "✅ %s now has access to your voice channel."
}
},
{
"language": "fr",
"messages": {
"system.default.lobbyname": " Créer une salle privée",
"system.default.category": "Salles privées",
"system.log.initdb.01": "Erreur de base de données: %v",
"system.log.initdb.02": "Erreur lors de la création de la table: %v",
"response.voicechannel.created": "✅ Canal vocal **%s** créé.",
"response.voicechannel.created.notinvoice": " Vous n'êtes actuellement dans aucun canal vocal; veuillez rejoindre manuellement votre nouvelle salle.",
"response.voicechannel.created.move": " Je vais maintenant vous déplacer dans ce canal.",
"response.setlobby.onlyadmins": "❌ Seuls les administrateurs sont autorisés à faire cela.",
"response.setlobby.pleaseentername": "Veuillez entrer un nom.",
"response.setlobby.error.saving": "⚠️ Nom du salon défini, mais échec de l'enregistrement. Vérifiez les journaux.",
"response.setlobby.success": "✅ Nom du salon mis à jour en: %s",
"response.setcategory.onlyadmins": "❌ Seuls les administrateurs sont autorisés à faire cela.",
"response.setcategory.error.name":"Veuillez entrer un nom.",
"response.setcategory.error.saving": "⚠️ Nom de la catégorie défini, mais échec de l'enregistrement. Vérifiez les journaux.",
"response.setcategory.success": "✅ Nom de la catégorie mis à jour en: %s",
"response.settimeout.onlyadmins": "❌ Seuls les administrateurs sont autorisés à faire cela.",
"response.settimeout.error.saving": "⚠️ Délai d'attente défini, mais échec de l'enregistrement. Vérifiez les journaux.",
"response.settimeout.success": "✅ Délai d'attente défini sur %d minutes.",
"response.adduser.error.user": "Veuillez entrer un membre valide.",
"response.adduser.error.notinvoice": "Vous n'êtes actuellement dans aucun canal vocal. Veuillez rejoindre votre canal privé d'abord.",
"response.adduser.error.notowner": "❌ Vous n'êtes pas le propriétaire de ce canal ou vous n'avez pas les droits nécessaires (Gérer le canal).",
"response.adduser.error.setpermissions": "Impossible de définir les permissions: %v",
"response.adduser.success": "✅ %s a maintenant accès à votre canal vocal."
}
},
{
"language": "es",
"messages": {
"system.default.lobbyname": " Crear sala privada",
"system.default.category": "Salas privadas",
"system.log.initdb.01": "Error en la base de datos: %v",
"system.log.initdb.02": "Error al crear la tabla: %v",
"response.voicechannel.created": "✅ Canal de voz **%s** creado.",
"response.voicechannel.created.notinvoice": " Actualmente no estás en un canal de voz; por favor, únete manualmente a tu nueva sala.",
"response.voicechannel.created.move": " Ahora te moveré allí.",
"response.setlobby.onlyadmins": "❌ Solo los administradores pueden hacer esto.",
"response.setlobby.pleaseentername": "Por favor, ingresa un nombre.",
"response.setlobby.error.saving": "⚠️ Nombre de sala configurado, pero falló el guardado. Revisa los registros.",
"response.setlobby.success": "✅ Nombre de sala actualizado a: %s",
"response.setcategory.onlyadmins": "❌ Solo los administradores pueden hacer esto.",
"response.setcategory.error.name":"Por favor, ingresa un nombre.",
"response.setcategory.error.saving": "⚠️ Nombre de la categoría configurado, pero falló el guardado. Revisa los registros.",
"response.setcategory.success": "✅ Nombre de la categoría actualizado a: %s",
"response.settimeout.onlyadmins": "❌ Solo los administradores pueden hacer esto.",
"response.settimeout.error.saving": "⚠️ Tiempo de espera configurado, pero falló el guardado. Revisa los registros.",
"response.settimeout.success": "✅ Tiempo de espera configurado a %d minutos.",
"response.adduser.error.user": "Por favor, ingresa un miembro válido.",
"response.adduser.error.notinvoice": "Actualmente no estás en ningún canal de voz. Únete primero a tu canal privado.",
"response.adduser.error.notowner": "❌ No eres el propietario de este canal o te faltan permisos (Gestionar Canal).",
"response.adduser.error.setpermissions": "No se pudieron configurar los permisos: %v",
"response.adduser.success": "✅ %s ahora tiene acceso a tu canal de voz."
}
}
]

48
main.go
View File

@@ -99,6 +99,7 @@ func setLanguage(guildID, language string) error {
// Sprachabruf
func getLanguage(guildID string) string {
cfg := getCfg(guildID)
//fmt.Println("Debug: Language:", cfg.Language)
return cfg.Language
}
@@ -720,11 +721,12 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: "Konnte Voice-Channel nicht erstellen. Fehlen dem Bot Rechte (Manage Channels/Move Members)?", Flags: discordgo.MessageFlagsEphemeral}})
return
}
msg := fmt.Sprintf("✅ Voice-Channel **%s** erstellt.", newChan.Name)
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.voicechannel.created"], newChan.Name)
if srcVC == "" {
msg += " Du bist aktuell in keinem Voice-Channel; join bitte manuell in deinen neuen Raum."
msg += translations[getLanguage(guildID)]["response.voicechannel.created.notinvoice"]
} else {
msg += " Ich verschiebe dich jetzt dort hinein."
msg += translations[getLanguage(guildID)]["response.voicechannel.created.move"]
}
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{Content: msg, Flags: discordgo.MessageFlagsEphemeral}})
@@ -734,7 +736,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "❌ Nur Administratoren dürfen das.",
Content: translations[getLanguage(guildID)]["response.setlobby.onlyadmins"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -753,7 +755,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Bitte gib einen Namen an.",
Content: translations[getLanguage(guildID)]["response.setlobby.pleaseentername"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -767,7 +769,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "⚠️ Lobby-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
Content: translations[getLanguage(guildID)]["response.setlobby.error.saving"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -775,10 +777,11 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
}
// Antwort <= 3s
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.setlobby.success"], name)
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "✅ Lobby-Name aktualisiert auf: " + name,
Content: msg,
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -789,7 +792,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "❌ Nur Administratoren dürfen das.",
Content: translations[getLanguage(guildID)]["response.setcategory.onlyadmins"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -808,7 +811,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Bitte gib einen Namen an.",
Content: translations[getLanguage(guildID)]["response.setcategory.error.name"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -822,7 +825,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "⚠️ Kategorie-Name gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
Content: translations[getLanguage(guildID)]["response.setcategory.error.saving"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -830,10 +833,11 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
}
// Antwort <= 3s
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.setcategory.success"], name)
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "✅ Kategorie-Name aktualisiert auf: " + name,
Content: msg,
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -844,7 +848,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "❌ Nur Administratoren dürfen das.",
Content: translations[getLanguage(guildID)]["response.settimeout.onlyadmins"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -870,7 +874,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "⚠️ Timeout gesetzt, aber Speichern fehlgeschlagen. Schau die Logs.",
Content: translations[getLanguage(guildID)]["response.settimeout.error.saving"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -878,10 +882,11 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
}
// Antwort <= 3s
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.settimeout.success"], minutes)
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: fmt.Sprintf("✅ Timeout auf %d Minuten gesetzt.", minutes),
Content: msg,
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -911,7 +916,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Bitte gib ein gültiges Mitglied an.",
Content: translations[getLanguage(guildID)]["response.adduser.error.user"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -924,7 +929,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Du bist aktuell in keinem Voice-Channel. Betritt zuerst deinen privaten Channel.",
Content: translations[getLanguage(guildID)]["response.adduser.error.notinvoice"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -938,7 +943,7 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "❌ Du bist nicht der Besitzer dieses Channels oder dir fehlen Rechte (Manage Channel).",
Content: translations[getLanguage(guildID)]["response.adduser.error.notowner"],
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -960,20 +965,21 @@ func onInteractionCreate(_ string) func(s *discordgo.Session, i *discordgo.Inter
allow,
0,
); err != nil {
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.adduser.error.setpermissions"], err)
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: fmt.Sprintf("Konnte Berechtigung nicht setzen: %v", err),
Content: msg,
Flags: discordgo.MessageFlagsEphemeral,
},
})
return
}
msg := fmt.Sprintf(translations[getLanguage(guildID)]["response.adduser.success"], target.Username)
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: fmt.Sprintf("✅ %s hat jetzt Zugriff auf deinen Voice-Channel.", target.Username),
Content: msg,
Flags: discordgo.MessageFlagsEphemeral,
},
})
@@ -1257,7 +1263,7 @@ func Enabled(k string, def bool) bool {
func main() {
initDB()
loadTranslationsFromFile(GetENV("TRANSLATIONS_FILE", "./language.json"))
translations, _ = loadTranslationsFromFile(GetENV("TRANSLATIONS_FILE", "/tempsrc/language.json"))
token := GetENV("DISCORD_TOKEN", "")
if token == "" {
log.Fatal("Bitte setze DISCORD_TOKEN")