- Actualiza tu
custom statuscon la línea actual de la canción - Rotación automática cada 2-3 segundos con jitter dinámico
- Anti-ban pasivo implementado (User-Agent real, cooldown inteligente)
- Letras con estilo ASCII (figlet) + 4 esquemas de color
- Colores: Arcoíris | Cian Neón | Verde Matrix | Rosa Fucsia
- Fuentes: Standard, Big, Mini (perfecto para líneas largas)
- Soporte para 10 idiomas: 🇺🇸 English, 🇪🇸 Español, 🇫🇷 Français, 🇵🇹 Português, 🇩🇪 Deutsch, 🇮🇹 Italiano, 🇯🇵 日本語, 🇰🇷 한국어, 🇷🇺 Русский, 🇨🇳 中文
- Caché inteligente para evitar llamadas API duplicadas
- Muestra letra original + traducida simultáneamente
- Habilitar/deshabilitar traductor dinámicamente
- Seleccionar idioma en tiempo real
- Indicador de estado en el menú principal
- Persistencia de configuración en sesión
- Headers reales de navegador
- Cooldown dinámico 2-3 segundos
- Jitter de ±500ms para simular latencia humana
- Solo usa endpoints oficiales de Discord
- Node.js 18.x o superior
- npm o yarn
- Cuenta de Discord (token de usuario, no de bot)
- Aplicación en Spotify Developer Dashboard (Client ID + Secret)
git clone https://github.com/Hellsa/discord-spotify-lyrics.git
cd discord-spotify-lyricsnpm installCrea un archivo .env en la raíz (o copia desde .env.example):
cp .env.example .envEdita el archivo .env con tus credenciales:
# Discord (token de usuario, NO de bot)
DISCORD_TOKEN=your_discord_user_token_here
# Spotify API credentials
SPOTIFY_CLIENT_ID=your_client_id
SPOTIFY_CLIENT_SECRET=your_client_secret
SPOTIFY_REDIRECT_URI=http://127.0.0.1:8888/callback
⚠️ Aviso: El uso de tokens de usuario en Discord viola sus Términos de Servicio. Este proyecto es solo para fines educativos. Úsalo bajo tu propia responsabilidad.
npm startAl ejecutar npm start verás un menú con opciones:
[01] Discord Lyrics Mode
[02] Terminal Lyrics Mode
[03] Settings & Translator
- Envía líneas de la canción a tu estado personalizado
- Funciona en segundo plano (silencioso)
- Ideal para que tus amigos vean lo que escuchas
- Muestra las letras en la consola con estilo visual
- Personaliza colores y fuentes
- Perfecto para streaming o segunda pantalla
Opciones disponibles:
| Opción | Descripción |
|---|---|
| Color | Arcoíris • Cian • Matrix • Rosa |
| Fuente | Standard • Big • Mini |
- Habilitar/Deshabilitar Traductor ✅ ❌
- Seleccionar Idioma (10 opciones disponibles)
- Persistencia en la sesión actual
- Muestra estado:
Traductor: HABILITADO (Español)oTraductor: DESHABILITADO
discord-spotify-lyrics/
│
├── src/
│ ├── config/
│ │ └── index.js # Configuración centralizada (env variables)
│ │
│ ├── services/
│ │ ├── spotify.js # OAuth 2.0 y obtención de canción actual
│ │ ├── discord.js # Actualización de custom_status
│ │ ├── lyrics.js # Obtención y parseo de letras (lrclib)
│ │ └── translator.js # Traducción multiidioma (MyMemory API) ✨
│ │
│ ├── ui/
│ │ ├── menu.js # Menús interactivos + Settings ✨
│ │ └── render.js # Renderizado visual en terminal
│ │
│ ├── app.js # Lógica principal y orquestación
│ └── index.js # Punto de entrada modular
│
├── .env.example
├── .gitignore
├── index.js # Entry point (backward compatibility)
├── package.json
├── LICENSE
└── README.md
| Servicio | Función |
|---|---|
| config | Lee y valida variables de entorno (.env) |
| spotify | Autenticación OAuth + obtiene canción actual |
| discord | PATCH a custom_status con anti-ban |
| lyrics | Consulta lrclib.net y parsea LRC format |
| translator | Traducción con caché (10 idiomas) ✨ |
| ui/menu | Menú interactivo + Settings ✨ |
| ui/render | Renderizado visual con chalk + figlet |
| Problema | Solución |
|---|---|
| ❌ Invalid token Discord | Verifica que sea token de usuario (empieza por ND... o MD...). No uses token de bot. |
| ❌ Spotify 401 Unauthorized | Regenera tu Client Secret en Spotify Dashboard |
| ❌ No aparece estado en Discord | Activa en Ajustes > Privacidad > "Mostrar actividad actual" |
| ❌ Letras muy largas | Cambia la fuente a Mini desde el menú Terminal Mode |
| ❌ Traductor no funciona | Verifica tu conexión a internet (usa API MyMemory Translated.net) |
| ❌ No se autentica Spotify | Asegúrate que el navegador se abre automáticamente en http://127.0.0.1:8888 |
- ✅ User-Agent real de navegador
- ✅ Cooldown dinámico 2500ms ± 1200ms jitter
- ✅ Solicitud HTTPS con headers oficiales
- ✅ Respeta rate limits de Discord y Spotify
- Polling cada 500ms (configurable)
- Caché de traducciones en memoria
- Sincronización inteligente (solo actualiza si cambió la línea)
- Gestión automática de reconexión
- Spotify Web API - OAuth 2.0 Flow
- Discord API v9 - Custom Status PATCH
- lrclib.net - Base de datos de letras sincronizadas
- MyMemory Translated.net - Traducción automática (10 idiomas)
Este proyecto se distribuye bajo la licencia MIT. Ver LICENSE para más detalles.
Las contribuciones son bienvenidas mediante Pull Requests.
Para cambios importantes:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feat/amazing-feature) - Commit con formato claro (
git commit -m "feat: descripcion del cambio") - Push a la rama (
git push origin feat/amazing-feature) - Abre un Pull Request
- Persistencia de settings entre sesiones (config file)
- Rate limiting para traductor
- Soporte para más fuentes ASCII
- Sincronización con queue de Spotify
- Interfaz web (dashboard)
- Docker support
Hecho con ❤️ para Discord y Spotify lovers
Al contribuir, aceptas que tu código pase a ser MIT licensed.
Para cambios grandes, abre primero un Issue para discutirlos.
👤 Author Hellsa – GitHub
Hecho con ❤️ y caffeine. No afiliado a Discord Inc. ni a Spotify AB.