Bot de Discord que automatiza el acceso a canales de voz temporales. Cuando alguien entra al canal "Puerta", el bot le pregunta si quiere solicitar acceso a algún canal; si confirma, le muestra en privado la lista de canales disponibles y, al elegir uno, se conecta a ese canal de voz y avisa por audio (TTS) que alguien quiere entrar.
- Detecta automáticamente cuando alguien entra al canal "Puerta".
- Confirmación previa (Sí/No) para evitar solicitudes por accidente.
- Menú de selección de canal privado (solo lo ve quien lo solicitó).
- Aviso por voz (TTS) en español al canal elegido.
- Muestra solo los canales de voz que el usuario puede ver, y vuelve a validarlos al momento de elegir.
- Las solicitudes simultáneas en un mismo servidor hacen fila en vez de fallar.
- Python 3.10+
- FFmpeg instalado y accesible desde la terminal (
ffmpeg -versiondebe funcionar) - Una aplicación de bot creada en el Discord Developer Portal
-
Clona el repositorio:
git clone https://github.com/AlejandroOsorto/Portero.git cd Portero -
Crea y activa un entorno virtual:
python -m venv venv # Windows (PowerShell) venv\Scripts\Activate.ps1 # macOS / Linux source venv/bin/activate
-
Instala las dependencias:
pip install -r requirements.txt
-
Copia
.env.ejemploa.envy completa tus propios valores:cp .env.ejemplo .env
-
Configura el bot en el Discord Developer Portal:
- En Bot, no hace falta activar ningún intent privilegiado: el bot solo usa los intents por defecto.
- En OAuth2 > URL Generator, genera un link de invitación con el scope
boty los permisos:View Channels,Connect,Speak,Send Messages,Embed Links. - Invita el bot a tu servidor y dale permisos de Conectar y Hablar en la categoría de canales temporales.
-
Ejecuta el bot:
python main.py
| Variable | Descripción |
|---|---|
DISCORD_TOKEN |
Token del bot (Developer Portal > Bot > Reset Token) |
PUERTA_CHANNEL_ID |
ID del canal de voz "Puerta" |
CATEGORY_ID |
ID de la categoría que contiene los canales de voz temporales (opcional; si se omite se usan todos los canales de voz del servidor) |
TTS_VOICE |
Voz usada para el aviso por TTS (opcional, por defecto es-ES-AlvaroNeural) |
EXCLUDED_CHANNEL_IDS |
IDs de canales a excluir siempre, separados por coma (opcional) |
Para obtener los IDs: activa el Modo de desarrollador en Discord (Configuración > Avanzado), luego clic derecho sobre el canal o categoría > Copiar ID.
No hacen falta token, red ni ffmpeg: los tests usan dobles de prueba para los objetos de Discord.
python -m unittest discover -s tests -t .Se corren solos en cada Pull Request. En TESTING.md está el detalle: cómo correr un test suelto, qué cubre cada archivo y cómo agregar casos nuevos.
- El
.envnunca debe subirse al repositorio — ya está excluido en.gitignore. - Si el bot se cierra por error de permisos, revisa que tenga acceso de Conectar y Hablar en el canal específico al que intenta unirse.
- Si el bot avisa que no pudo reproducir el aviso, casi siempre es que ffmpeg no está en el
PATHo que falta el permiso de Hablar en ese canal. - La carpeta
tts_audio/se limpia sola al arrancar y después de cada aviso; no hace falta tocarla.