Por qué los bots de música dejaron de reproducir YouTube

Los bots de música dejaron de reproducir YouTube porque este bloquea el acceso automatizado y las librerías de extracción se rompen o se descontinuaron. No hay arreglo permanente: solo soluciones frágiles u otras fuentes.

Actualizado el 6 min de lectura

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Entender por qué YouTube dejó de funcionar en los bots de música
  • Identificar qué error y qué librería usa tu bot
  • Elegir entre soluciones frágiles y fuentes de audio alternativas
En esta página

Si tu bot de música reproducía YouTube sin problemas y de repente empezó a devolver errores, el fallo casi nunca está en tu código. YouTube no ofrece una forma oficial para que los bots de Discord saquen audio de su plataforma, así que todo bot de música depende de librerías que imitan a un cliente de YouTube. Cuando YouTube cambia algo, se rompen.

El tema es volátil: antes de actuar, confirma el estado actual en la documentación de tu librería.

/playBot oLavalinkYouTubeAudio suenaBloqueo“not a bot”Formato nodisponibleoOtra fuenteSoundCloud, Bandcamp, enlaces HTTP
Cada petición a YouTube puede sonar o ser bloqueada, y el arreglo es frágil; otras fuentes no pasan por ese bloqueo.

¿Por qué el bot dejó de reproducir YouTube?#

Se suman tres factores.

  1. Términos de servicio. Los términos de YouTube prohíben acceder al servicio por medios automatizados (robots, botnets, scrapers) sin permiso previo por escrito. También prohíben eludir o interferir con las funciones de seguridad del servicio y descargar contenido salvo que el servicio lo permita. En 2021, tras pedidos de Google, bots grandes como Groovy y Rythm cerraron (Groovy y Rythm, en The Verge).
  2. Detección de automatización. YouTube marca las peticiones que parecen automatizadas y responde con bloqueos como la solicitud de inicio de sesión.
  3. Cambios en los clientes y en el descifrado. Las librerías se hacen pasar por clientes de YouTube (web, Android, TV) y resuelven desafíos en JavaScript. Cuando un cliente deja de funcionar, la librería se rompe hasta que alguien publica una corrección.

¿Qué error aparece?#

El síntoma cambia según la librería. El más común:

text
Sign in to confirm you're not a bot

Es el bloqueo de automatización. El README de youtube-source, el plugin de YouTube de Lavalink, describe justo este caso y dice que OAuth y poToken pueden ayudar, pero no son una solución garantizada.

Otras señales: búsquedas que devuelven vacío, pistas que cargan y terminan en segundos, o el bot que entra al canal de voz y se queda mudo. Como cada librería reporta los errores de forma distinta, el diagnóstico empieza por saber cuál usas.

¿Cómo saber qué librería usa el bot?#

Si tu proyecto usa Situación
discord-player v7 Se eliminó el extractor de YouTube. La documentación dice que la reproducción de YouTube se descontinuó "debido a la frecuente rotura de las librerías de extracción". La librería aún detecta enlaces, pero no reproduce ni extrae metadatos.
Lavalink con la fuente de YouTube integrada Se desactiva en la configuración recomendada y se reemplaza por el plugin youtube-source.
Lavalink con youtube-source Actualiza el plugin y revisa la lista de clientes.
yt-dlp (directo o con un wrapper) Actualiza yt-dlp e instala un runtime de JavaScript.
Paquetes de extracción antiguos sin mantenimiento Cambia a una de las opciones anteriores o a otra fuente.

Esta sección y la siguiente resumen lo que dice la documentación de cada proyecto. Ninguno de estos ajustes hace que el uso sea compatible con los términos de YouTube.

Si usas Lavalink v4, desactiva la fuente integrada (la documentación de Lavalink la marca como obsoleta) y usa el plugin. Cambia VERSION por la versión de la pestaña Releases de youtube-source:

yaml
lavalink:
  server:
    password: "cambia-esta-clave"
    sources:
      youtube: false
  plugins:
    - dependency: "dev.lavalink.youtube:youtube-plugin:VERSION"
      snapshot: false

plugins:
  youtube:
    enabled: true
    allowSearch: true
    allowDirectVideoIds: true
    allowDirectPlaylistIds: true
    clients:
      - MUSIC
      - ANDROID_VR
      - WEB
      - WEBEMBEDDED

Los clientes se consultan en el orden de la lista. Algunos puntos de la documentación del plugin:

  • MUSIC solo sirve para buscar (prefijo ytmsearch:), no para reproducir.
  • El cliente ANDROID se describe como muy restringido y que falla con frecuencia. Prefiere ANDROID_VR y los demás. TV exige iniciar sesión para reproducir.
  • TVHTML5EMBEDDED se eliminó en la versión 1.18.0 porque ya no sirve para reproducir. TVHTML5_SIMPLY ocupó su lugar.
  • El poToken solo vale para WEB y WEBEMBEDDED. OAuth solo vale para TV. No necesitas uno si usas el otro.
  • Hay soporte de descifrado remoto (remoteCipher), con un servidor aparte, yt-cipher.

Tras cambiar el application.yml, reinicia Lavalink y lee los logs para ver qué cliente falló.

¿Cómo intentar arreglarlo con yt-dlp?#

yt-dlp pasó a exigir un runtime de JavaScript para resolver los desafíos de YouTube, mediante los scripts del proyecto EJS. Se recomienda Deno, que viene habilitado por defecto; Node.js también funciona si lo habilitas con --js-runtimes. La versión mínima de cada runtime está en la documentación.

Cuando los clientes por defecto fallan, la página de extractores sugiere el cliente mweb con un PO Token, que yt-dlp no puede generar por sí solo (wiki).

¿Vale la pena usar cookies u OAuth?#

Es la solución más citada y la más arriesgada. youtube-source advierte que OAuth puede terminar en el cierre de la cuenta, recomienda cuentas desechables y dice que con mucho tráfico puede provocar errores de límite. yt-dlp indica que usar tu cuenta aumenta el riesgo de bloqueo. Nunca uses tu cuenta personal.

Hay algo que ningún código resuelve: el tema de los términos de servicio sigue ahí. Operar un bot público que saca audio de YouTube es una decisión con riesgo, y la responsabilidad es de quien opera el bot.

¿Qué alternativas hay?#

  • Otras fuentes en Lavalink, como SoundCloud, Bandcamp, Twitch, Vimeo y enlaces HTTP, que el servidor ya incluye (configuración de Lavalink). Cada servicio tiene sus propios términos de uso.
  • Archivos propios o enlaces directos de audio que tengas derecho a reproducir.
  • Servicios con API oficial de audio, respetando los términos de cada uno.
  • Aceptar la fragilidad: mantener el plugin actualizado, monitorear el bot y avisar a los usuarios cuando YouTube falle.

Fija una versión del plugin o de la librería en producción y sigue los releases. Cuando YouTube vuelva a cambiar, el arreglo suele salir como un release nuevo y tu trabajo es aplicarlo. Para entender la pieza de audio detrás de todo esto, mira qué es Lavalink.

Cómo hacerlo en Square Cloud#

En Square Cloud el bot de música corre como cualquier bot de Discord: haces el deploy por ZIP en el panel, CLI, GitHub o la extensión de VS Code, con discord.js, discord.py, JDA u otra librería de Gateway. Hay soporte de voz y FFmpeg está disponible en el contenedor.

Lavalink corre como una aplicación web separada en la misma cuenta (desde 512 MB), y el bot se conecta a su subdominio por el puerto 443, con conexión segura (secure: true). Así actualizas el plugin de YouTube reiniciando solo Lavalink. La RAM del plan es un pool compartido entre las aplicaciones, con un mínimo de 256 MB por aplicación en segundo plano. Las variables de entorno (como la contraseña de Lavalink) se definen en el panel y rigen desde el próximo reinicio.

Nada de esto cambia lo que YouTube decida bloquear: el hosting mantiene el proceso encendido, pero lo que el bot hace con YouTube sigue siendo responsabilidad de quien lo opera. Para el paso a paso del deploy, mira cómo alojar un bot de discord.js y la página de bots de Discord en Square Cloud.

Hosting de bots

Tu bot en línea 24/7, con reinicio automático

Más información

Preguntas frecuentes

¿Por qué mi bot de música de Discord ya no reproduce YouTube?

YouTube bloquea las peticiones automatizadas y cambia sus clientes con frecuencia, lo que rompe las librerías que extraen el audio. En algunos casos la librería se descontinuó, como el extractor de YouTube de discord-player v7.

¿Qué significa 'Sign in to confirm you're not a bot'?

Es el bloqueo de YouTube a las peticiones que clasifica como automatizadas. Los proyectos de Lavalink y yt-dlp mencionan OAuth y poToken como soluciones, pero ninguna está garantizada.

¿Actualizar la librería lo arregla?

A veces, cuando el fallo es un cambio que ya se corrigió en una versión nueva. Si la librería se descontinuó, actualizar no sirve: hay que cambiar de solución o de fuente.

¿Es seguro usar una cuenta de Google en el bot?

No. El propio youtube-source advierte que el inicio de sesión por OAuth puede llevar al cierre de la cuenta y recomienda cuentas desechables. yt-dlp advierte algo parecido sobre las cookies.

Siguiente artículoCómo hospedar Evolution APIPara hospedar Evolution API necesitas Node.js, PostgreSQL o MySQL, Redis y un proceso siempre activo. Mira el paso a paso, del .env al primer envío.