Skip to content

Triskcraft/TTriSkcraftBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TTSBot — Bot de Discord Texto a Voz (Español)

Bot de Discord que convierte texto en voz y lo reproduce en un canal de voz. Soporta español por defecto, cola de reproducción por servidor, límites anti-abuso y configuración por servidor. Arquitectura modular y fácil de extender a otros proveedores TTS (Google Cloud, Azure, ElevenLabs, etc.).

Características

  • Comandos slash (/say, /join, /leave, ...).
  • TTS en español vía gTTS, transcodificado a Ogg/Opus con ffmpeg-static (sin dependencias nativas de Opus que compilar — ideal para VPS).
  • Cola de reproducción independiente por servidor: los audios no se pisan.
  • Multi-servidor simultáneo.
  • Límite de caracteres, cooldown por usuario y tamaño máximo de cola.
  • Configuración por servidor persistida en disco (idioma, voz, velocidad).
  • Auto-salida cuando el canal de voz queda vacío.
  • Manejo de reconexión y limpieza de estado.
  • Logs estructurados con pino.

Requisitos

  • Node.js >= 22.12.0 (requerido por @discordjs/voice).
  • Una aplicación de bot en el Discord Developer Portal.
  • ffmpeg se incluye vía ffmpeg-static (no hace falta instalarlo aparte).

Stack

Área Tecnología
Gateway discord.js v14
Voz @discordjs/voice + @snazzah/davey (DAVE) + sodium-native
TTS gttsffmpeg-static (Ogg/Opus)
Logs pino / pino-pretty
Config dotenv

Estructura del proyecto

src/
  index.js              # Arranque: carga comandos/eventos y login
  deploy-commands.js    # Registro de slash commands en Discord
  config/
    config.js           # Lee y valida variables de entorno
  commands/             # Un archivo por comando slash
  events/               # Handlers de eventos (ready, interactionCreate, voiceStateUpdate)
  services/
    ttsService.js       # Síntesis TTS (proveedor abstraído aquí)
  managers/
    voiceManager.js     # Conexión de voz y reproducción
    queueManager.js     # Cola de reproducción por servidor
    guildManager.js     # Estado y settings por servidor (persistencia)
  utils/                # logger, validadores, cooldown, embeds
data/
  guild-settings/       # JSON de configuración por servidor (runtime)

Configuración del bot en Discord

  1. Crea una aplicación y un bot en el Developer Portal.
  2. Bot → Privileged Gateway Intents: este bot no requiere intents privilegiados (usa Guilds y GuildVoiceStates).
  3. OAuth2 → URL Generator: scopes bot y applications.commands. Permisos del bot: Connect, Speak, Send Messages, Use Application Commands.
  4. Invita el bot con la URL generada.

Instalación

git clone <url-del-repo>
cd ttsbot
npm install
cp .env.example .env
# edita .env con tu token, client id y guild id

Variables de entorno

Ver .env.example. Resumen:

Variable Descripción
DISCORD_TOKEN Token del bot (secreto)
CLIENT_ID Application ID
GUILD_ID Servidor de pruebas (registro instantáneo). Vacío = global
DEFAULT_LANGUAGE Idioma TTS por defecto (es)
DEFAULT_SPEAKING_RATE Velocidad por defecto (gTTS la ignora)
MAX_CHARS_PER_MESSAGE Límite de caracteres por /say
COOLDOWN_SECONDS Cooldown por usuario
MAX_QUEUE_SIZE Máximo de mensajes en cola por servidor
LOG_LEVEL trace/debug/info/warn/error

Uso

npm run deploy   # registra los slash commands (una vez, o tras añadir comandos)
npm start        # arranca el bot
npm run dev      # arranca con recarga automática (nodemon)

Con GUILD_ID definido, los comandos aparecen al instante en ese servidor. Sin él, el registro es global y puede tardar hasta ~1 hora.

Comandos

Comando Descripción
/join El bot entra a tu canal de voz
/leave El bot sale del canal de voz
/say <texto> Reproduce el texto como voz (te une si hace falta)
/voice [voz] Muestra o cambia la voz TTS
/language [idioma] Muestra o cambia el idioma del servidor
/speed [velocidad] Muestra o cambia la velocidad (según proveedor)
/stop Detiene la reproducción y limpia la cola
/queue Muestra la cola de mensajes pendientes
/help Muestra la ayuda

Nota: gTTS no soporta selección de voz ni velocidad variable. /voice y /speed guardan el ajuste para cuando se migre a un proveedor que sí lo soporte (Google Cloud TTS, Azure, etc.). El proveedor está aislado en src/services/ttsService.js.

Despliegue en un VPS (Linux)

# en el servidor
git clone <url-del-repo> && cd ttsbot
npm ci
cp .env.example .env && nano .env   # configura los secretos
npm run deploy

# proceso persistente con pm2
npm i -g pm2
pm2 start src/index.js --name ttsbot
pm2 save && pm2 startup

Mantén .env fuera del control de versiones (ya está en .gitignore). Nunca publiques el token; si se filtra, regenéralo en el Developer Portal.

Solución de problemas

  • El bot se une pero no se oye / timeout The operation was aborted: asegúrate de usar @discordjs/voice >= 0.19 y de tener @snazzah/davey instalado (protocolo DAVE, requerido por Discord en varias regiones) y una librería de cifrado (sodium-native). Verifica con:
    node -e "console.log(require('@discordjs/voice').generateDependencyReport())"
  • Los comandos no aparecen: ejecuta npm run deploy. Con GUILD_ID es instantáneo; el registro global tarda.
  • No se oye nada pero no hay error: revisa que el bot tenga permisos Connect y Speak en el canal.

Licencia

MIT — ver LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors