Si eres creador de contenido, sabes lo tedioso que es publicar manualmente cada nuevo vídeo en todas tus redes. Aunque existen bots de Discord que hacen esto, muchos son de pago o fallan constantemente por las limitaciones de la API oficial de YouTube.
Hoy vamos a crear nuestro propio script en Python que utiliza el feed RSS oculto de YouTube y los Webhooks de Discord. ¿El resultado? Notificaciones instantáneas, gratuitas y sin límites de cuota, ideal para dejarlo corriendo en un servidor, NAS o Raspberry Pi.
🛠️ Requisitos previos
Para que esto funcione, necesitamos preparar nuestro entorno. Solo necesitas dos cosas:
1. Crear un Webhook en tu servidor de Discord
Los Webhooks son URLs únicas que permiten a aplicaciones externas enviar mensajes a un canal de Discord sin necesidad de programar un Bot complejo.
- Ve a tu servidor de Discord y haz clic en la rueda dentada (⚙️) junto al canal donde quieres los avisos.
- Navega a Integraciones > Webhooks.
- Haz clic en Nuevo Webhook, ponle el nombre y la foto de tu canal, y pulsa Copiar URL del Webhook. Guárdala bien.
2. Instalar Python (Tutorial para Windows)
Si vas a probar o ejecutar el script en tu ordenador con Windows, necesitas tener Python instalado:
- Ve a la página oficial python.org/downloads y descarga la última versión para Windows.
- Abre el instalador. ¡Paso crucial! Antes de darle a instalar, marca la casilla abajo del todo que dice «Add Python to PATH» (o «Add python.exe to PATH»). Si no marcas esto, los comandos no funcionarán.
- Haz clic en Install Now y espera a que termine.
- Abre la consola de comandos de Windows (pulsa la tecla Windows, escribe
cmdy dale a Enter). - Instala las librerías necesarias ejecutando este comando:
pip install requests feedparser
🔍 El truco: Obtener tu Channel ID real de YouTube
El feed RSS de YouTube no entiende las URLs modernas con arroba (ej: @GambaGamer). Necesitamos tu ID interno que empieza por UC.
Para sacarlo rápido:
- Ve a la página principal de tu canal en el navegador.
- Haz clic derecho en el fondo y selecciona Ver código fuente de la página (
Ctrl + U). - Pulsa
Ctrl + Fpara buscar y escribe:externalId - Justo al lado verás tu ID (algo como
"externalId":"UC-V2rbUb3CBa7J2V1t8sncg"). Copia solo la parte que empieza por UC.
💻 Versión 1: Script para un solo canal
Si solo gestionas un canal de YouTube, este código es perfecto para ti. Crea un archivo llamado discord_bot.py y pega esto, recordando cambiar las variables de configuración por tus datos:
import time
import requests
import feedparser
import os
# --- CONFIGURACIÓN ---
WEBHOOK_URL = "PEGA_AQUI_TU_URL_DEL_WEBHOOK"
CHANNEL_ID = "PEGA_AQUI_TU_CHANNEL_ID_QUE_EMPIEZA_POR_UC"
RSS_URL = f"https://www.youtube.com/feeds/videos.xml?channel_id={CHANNEL_ID}"
LAST_VIDEO_FILE = "ultimo_video.txt"
def get_last_published():
if os.path.exists(LAST_VIDEO_FILE):
with open(LAST_VIDEO_FILE, "r") as f:
return f.read().strip()
return None
def save_last_published(video_id):
with open(LAST_VIDEO_FILE, "w") as f:
f.write(video_id)
def check_new_video():
try:
feed = feedparser.parse(RSS_URL)
if not feed.entries:
return
latest_video = feed.entries[0]
video_id = latest_video.yt_videoid
video_url = latest_video.link
title = latest_video.title
if video_id != get_last_published():
print(f"Nuevo vídeo detectado: {title}")
mensaje = {
"content": f"¡Nuevo vídeo publicado! 🚀\n**{title}**\n{video_url}"
}
response = requests.post(WEBHOOK_URL, json=mensaje)
if response.status_code == 204:
print("Notificación enviada a Discord.")
save_last_published(video_id)
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
print("Bot iniciado...")
while True:
check_new_video()
time.sleep(900) # Comprueba cada 15 minutos (900 segundos)
🚀 Versión 2: Script Multicanal (Recomendado)
Si tienes varios canales (por ejemplo, un canal principal y otro de gameplays), ejecutar varios scripts es ineficiente. Esta versión mejorada utiliza un diccionario para revisar todos tus canales en un solo barrido y guarda el estado en un archivo .json.
import time
import requests
import feedparser
import os
import json
# --- CONFIGURACIÓN ---
WEBHOOK_URL = "PEGA_AQUI_TU_URL_DEL_WEBHOOK"
# Añade tantos canales como quieras: "ID_DEL_CANAL": "Nombre del Canal"
CANALES = {
"UC-V2rbUbxxxxxxxx": "1º Canal",
"UC_ID_DEL_SEGUNDO_CANAL_AQUI": "Canal Principal"
}
STATE_FILE = "estado_canales.json"
def load_state():
if os.path.exists(STATE_FILE):
with open(STATE_FILE, "r") as f:
return json.load(f)
return {}
def save_state(state):
with open(STATE_FILE, "w") as f:
json.dump(state, f)
def check_new_videos():
state = load_state()
estado_actualizado = False
for channel_id, channel_name in CANALES.items():
rss_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}"
try:
feed = feedparser.parse(rss_url)
if not feed.entries:
continue
latest_video = feed.entries[0]
video_id = latest_video.yt_videoid
video_url = latest_video.link
title = latest_video.title
if state.get(channel_id) != video_id:
print(f"Nuevo vídeo en {channel_name}: {title}")
mensaje = {
"content": f"¡Nuevo vídeo en **{channel_name}**! 🚀\n**{title}**\n{video_url}"
}
response = requests.post(WEBHOOK_URL, json=mensaje)
if response.status_code == 204:
state[channel_id] = video_id
estado_actualizado = True
except Exception as e:
print(f"Error comprobando {channel_name}: {e}")
if estado_actualizado:
save_state(state)
if __name__ == "__main__":
print("Bot multicanal iniciado...")
while True:
check_new_videos()
time.sleep(900)
Para probar cualquiera de los scripts en tu ordenador, solo abre la consola cmd en la carpeta donde lo hayas guardado y ejecuta: python discord_bot.py.
🐳 Bonus: Cómo dejarlo 24/7 usando Docker
Si tienes un servidor, un NAS con OpenMediaVault o una Raspberry Pi, la forma más limpia de mantener este script funcionando para siempre es Docker.
Crea dos archivos junto a tu script discord_bot.py:
**1. requirements.txt**
requests feedparser
**2. docker-compose.yml**
services:
discord-youtube-bot:
image: python:3.11-slim
container_name: bot_discord_youtube
restart: unless-stopped
working_dir: /app
volumes:
- .:/app
environment:
- TZ=Europe/Madrid
command: >
bash -c "pip install --no-cache-dir -r requirements.txt && python discord_bot.py"
Abre la terminal de tu servidor en esa carpeta y ejecuta docker compose up -d. ¡Listo! Tu bot ya está dockerizado, funcionando en segundo plano y te avisará en Discord automáticamente cada vez que subas un vídeo.

Deja una respuesta