feat: integración completa de Spotify como fuente primaria#33
Merged
Conversation
- Búsqueda y autocomplete solo Spotify (sin YouTube) - Resolución de álbumes y tracks vía Client Credentials - Autoplay inteligente: mismo artista + covers de distintos artistas - nowplaying enriquecido: álbum, fecha, popularidad, géneros, explícito - Cache en memoria para resultados Lavalink de Spotify - Reintento automático en fallos de Lavalink con URLs Spotify - Eliminadas funciones muertas: search_youtube_best_match, build_status_embed - Refactor: utils/spotify_resolver, utils/env_utils - Autocomplete con cache local para respuestas instantáneas
There was a problem hiding this comment.
Pull request overview
Esta PR integra Spotify como fuente primaria de reproducción añadiendo soporte de LavaSrc en Lavalink (configuración + Docker) y actualizando el bot para reconocer/buscar URLs y resultados de Spotify. Además, centraliza utilidades de manejo de .env y simplifica algunas utilidades de embeds/búsqueda.
Changes:
- Integración de LavaSrc/Spotify en Lavalink (plugin, configuración, entrypoint con
envsubst) y paso de credenciales víadocker-compose. - Nuevas utilidades y lógica en el bot para búsqueda/autocomplete, reproducción y autoplay con Spotify (incluye resolver y metadata).
- Refactor de utilidades de variables de entorno hacia
utils/env_utils.pyy limpieza menor en utilidades.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| utils/spotify_resolver.py | Nuevo módulo para token OAuth y resolución/búsqueda/recomendaciones de Spotify. |
| utils/search.py | Añade detección/normalización de URLs de Spotify y limpia helpers no usados de YouTube. |
| cogs/music.py | Integra Spotify en autocomplete/búsqueda/playback, autoplay con recomendaciones y cachés. |
| config.py | Lee credenciales de Spotify desde variables de entorno. |
| docker-compose.yml | Pasa SPOTIFY_CLIENT_ID/SECRET a Lavalink y al bot. |
| lavalink/application.yml | Habilita y configura LavaSrc con Spotify como fuente. |
| Dockerfile.lavalink | Descarga el plugin LavaSrc, añade gettext-base y configura entrypoint. |
| lavalink/entrypoint.sh | Sustituye variables de entorno en application.yml antes de arrancar Lavalink. |
| utils/env_utils.py | Nuevo módulo compartido para leer/parsear/escribir .env. |
| run.py | Reutiliza utils.env_utils y elimina duplicación de helpers .env. |
| bootstrap.py | Reutiliza utils.env_utils y elimina duplicación de helpers .env. |
| utils/embeds.py | Simplifica build_base_embed y elimina código no usado. |
| main.py | Elimina un atributo de instancia no usado. |
| .env.example | Añade variables de entorno de Spotify. |
| .env.docker.example | Añade variables de entorno de Spotify para Docker. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Esta solicitud de extracción introduce la compatibilidad con Spotify mediante la integración del plugin LavaSrc en el servicio Lavalink y la actualización de los archivos de configuración, entorno y utilidades pertinentes. También incluye la limpieza y refactorización del código para el manejo de variables de entorno y funciones de utilidad.
Integración de Spotify/LavaSrc:
Se agregaron las credenciales del cliente de Spotify (
SPOTIFY_CLIENT_ID,SPOTIFY_CLIENT_SECRET) a.env.exampley.env.docker.example, y se pasaron a través dedocker-compose.ymlal servicio Lavalink. [1] [2] [3] [4]Se actualizó
lavalink/application.ymlpara habilitar y configurar el complemento LavaSrc para la compatibilidad con Spotify, incluyendo la configuración del proveedor y la fuente, y haciendo referencia a las nuevas variables de entorno.Se modificó
Dockerfile.lavalinkpara descargar el complemento LavaSrc, agregar un script de punto de entrada y asegurar que el complemento se cargue al iniciar el contenedor. [1] [2] [3] [4]Se agregó registro de depuración para LavaSrc en la configuración de Lavalink.
Gestión y refactorización de variables de entorno:
read_env_file,parse_env_lines,write_env_value) en un nuevo módulo de utilidadesutils/env_utils.py, y se actualizaronbootstrap.pyyrun.pypara que lo utilicen. [1] [2] [3] [4] [5]config.pypara leer las credenciales de Spotify del entorno.Utilidades y limpieza de código:
Se agregaron funciones de utilidad para la detección y normalización de URL de Spotify en
utils/search.py.Se eliminaron funciones no utilizadas o redundantes de
utils/search.pyy se optimizó el código. [1] [2] [3] [4]Limpieza menor en
utils/embeds.py(eliminación de código no utilizado y simplificación de la creación de incrustaciones). [1] [2]Se eliminó una variable de instancia no utilizada de
main.py.Esta solicitud de extracción añade compatibilidad con la integración de Spotify mediante la configuración del entorno, Docker y Lavalink para usar las credenciales de la API de Spotify y el complemento LavaSrc. También introduce varias mejoras en el código, incluyendo la refactorización de utilidades de variables de entorno y la eliminación de funciones no utilizadas.
Integración de Spotify y configuración de Lavalink:
Se añadieron
SPOTIFY_CLIENT_IDySPOTIFY_CLIENT_SECRETa.env.exampley.env.docker.example, y se pasaron a través dedocker-compose.ymltanto al serviciolavalinkcomo al servicio principal del bot. [1] [2] [3] [4]Se actualizó
lavalink/application.ymlpara habilitar y configurar el complementolavasrcpara la compatibilidad con Spotify, incluyendo la configuración del proveedor y la fuente, y se configuraron las credenciales de Spotify para usar variables de entorno.Se modificó
Dockerfile.lavalinkpara instalar el complemento LavaSrc, agregar un script de punto de entrada y asegurar que las variables de entorno se sustituyan en la configuración de Lavalink al inicio. Se agrególavalink/entrypoint.shpara gestionar esta sustitución. [1] [2] [3] [4]Establece las credenciales de Spotify como variables de entorno opcionales en
config.py.Refactorización de utilidades de variables de entorno:
read_env_file,parse_env_linesywrite_env_valuea un nuevo móduloutils/env_utils.pyy se actualizaron las importaciones enbootstrap.pyyrun.py. Se eliminaron las implementaciones duplicadas de dichos archivos. [1] [2] [3] [4] [5]Mejoras en Lavalink y el registro de eventos:
Se agregó registro de depuración para el complemento LavaSrc en
lavalink/application.yml.Se agregó
gettext-basea la imagen Docker de Lavalink para la sustitución de variables de entorno.Utilidades de búsqueda de YouTube y Spotify:
Se agregaron las funciones
is_spotify_urly_normalize_spotify_urlautils/search.pypara reconocer y normalizar las URL de Spotify.Se eliminaron las funciones internas de puntuación y coincidencia óptima de búsqueda de YouTube que no se utilizaban y eran redundantes, simplificando así el código. [1] [2] [3] [4]
Limpieza menor del código:
utils/embeds.pyymain.pypara mayor claridad y facilidad de mantenimiento. [1] [2] [3]Estos cambios, en conjunto, permiten la compatibilidad con pistas de Spotify a través de Lavalink y LavaSrc, mejorar la gestión de la configuración y limpiar el código fuente para facilitar su mantenimiento.