This commit is contained in:
@@ -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
|
||||
|
102
language.json
102
language.json
@@ -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
48
main.go
@@ -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")
|
||||
|
Reference in New Issue
Block a user