Bot de Discord para verificar usuarios nuevos mediante una clave almacenada en una hoja de cálculo de Google Sheets, asignarles el rol correspondiente y permitirles solicitar soporte si tienen problemas.
- ✅ Verifica a nuevos miembros al entrar en el servidor.
- 📩 Solicita una clave por mensaje privado al nuevo usuario.
- 🔍 Busca la clave en Google Sheets.
- 🧑💼 Si es válida:
- Cambia su apodo.
- Asigna el rol especificado.
- ❌ Si la clave no es válida, notifica al usuario y a los administradores.
- 🔐 Comando
!testclavepara que los administradores comprueben manualmente claves. - 🆘 Comando
!soportepara que cualquier usuario pueda enviar una solicitud privada de ayuda al equipo de admins. - 🎙️ Nuevos comandos de grabación de audio y transcripción:
!conectar- Conecta el bot al canal de voz en el que estás (o!conectar [canal])!desconectar- Desconecta el bot del canal de voz!grabar [proveedor] [nombre_archivo]- Inicia la grabación automática de audio!parar- Detiene la grabación y procesa la transcripción!transcribir [proveedor] [nombre_archivo]- Transcribe archivos de audio adjuntos!estado- Muestra el estado actual de conexiones y grabaciones
- 🧠 Transcripción con múltiples proveedores (seleccionables por comando):
openai- API de OpenAI con el modelogpt-4o-transcribe(por defecto)voxtral- API de Mistral con el modelo Voxtral (voxtral-mini-latest)whisper- Modelo Whisper ejecutado en local, sin conexión (fallback)
- Python 3.8+
- Un bot de Discord con los siguientes permisos:
- Leer mensajes y mensajes directos.
- Enviar mensajes y mensajes embebidos.
- Gestionar apodos.
- Gestionar roles.
- Conectar y Hablar en canales de voz (para grabación).
- Una hoja de cálculo de Google Sheets con:
- Acceso compartido a la cuenta de servicio.
- Formato de columnas:
Clave,Nombre Discord,Rol Asignado.
- Dependencias adicionales para grabación de audio:
openai- Transcripción congpt-4o-transcribey generación de resúmenesmistralai- Transcripción con Voxtralopenai-whisper- Transcripción local (fallback sin conexión)pydub/ffmpeg-python- Para procesamiento y compresión de audioPyNaCl- Para funcionalidad de voz en Discord
- Variables de entorno para transcripción (ver
.env):DEFAULT_TRANSCRIPTION_PROVIDER- Proveedor por defecto:openai,voxtralowhisperOPENAI_API_KEY- Necesaria paraopenaiy para los resúmenesMISTRAL_API_KEY- Necesaria paravoxtralOPENAI_TRANSCRIBE_MODEL,VOXTRAL_MODEL,WHISPER_MODEL- Modelos configurables
- Clona este repositorio:
git clone https://github.com/tuusuario/discord-verification-bot.git
cd discord-verification-bot- Crea y configura tu archivo
.env(puedes partir de.env.example). - Agrega tu
credentials.jsonde Google en la raíz del proyecto. - Ejecuta el bot con
python bot.py.
El proyecto incluye Dockerfile y docker-compose.yml. La imagen es ligera
(solo proveedores de transcripción por API: openai y voxtral); no incluye
PyTorch ni el Whisper local.
cp .env.example .env # y rellena los valores
docker compose up -d --build
docker compose logs -fLas credenciales de Google se pueden aportar de dos formas:
- Recomendada: pega el contenido de
credentials.jsonen la variableGOOGLE_CREDENTIALS_JSON(JSON en una línea o en base64). El bot crea el archivo al arrancar. - Alternativa: descomenta el montaje de
./credentials.jsonendocker-compose.yml.
- Crea una aplicación de tipo Compose (o Dockerfile) apuntando a este repo.
- En la pestaña Environment, pega las variables de
.env.examplecon tus valores reales (incluidaGOOGLE_CREDENTIALS_JSON). Dokploy las inyecta en el.envque leedocker-compose.yml. - (Opcional) Mantén el volumen
recordingspara conservar las transcripciones entre despliegues. - Despliega. Revisa los logs para ver
🟢 Bot iniciado correctamente.
El proveedor
whisper(local) no está disponible en la imagen Docker. Si lo necesitas, instala las dependencias extra conpip install -r requirements-whisper.txten un entorno propio (la imagen crecería a varios GB por PyTorch).
| Clave | Nombre Discord | Rol Asignado |
|---|---|---|
| ABC123 | David Ibañez | Desarrollador |
python bot.pyEste proyecto incluye un conjunto de pruebas unitarias para asegurar la calidad y el correcto funcionamiento del bot.
Para ejecutar las pruebas, sitúate en el directorio raíz del proyecto y ejecuta el siguiente comando en tu terminal:
python -m unittest discover testsEsto descubrirá y ejecutará automáticamente todas las pruebas unitarias ubicadas en el directorio tests/. Asegúrate de tener todas las dependencias del proyecto instaladas, aunque las pruebas unitarias están diseñadas para mockear dependencias externas como la API de Discord y Google Sheets.
✅ La grabación EN VIVO está activada (
LIVE_RECORDING_ENABLED=true). Discord forzó el cifrado de extremo a extremo en voz (E2EE/DAVE, marzo 2026) y py-cord upstream aún no descifra ese audio (issue #3139), así que instalamos el fork de vito1317 que implementa el descifrado DAVE en recepción (verrequirements.txt, pin al commit5a95f98). PonLIVE_RECORDING_ENABLED=falsepara desactivar la grabación sin tocar dependencias.💡 Alternativa sin grabación en vivo: usa
!transcribirsubiendo un archivo grabado con otra herramienta (Craig, OBS, el móvil…) para obtener transcripción y resumen.
!conectar- Conecta el bot al canal de voz en el que estás. También!conectar [canal]para indicarlo por nombre.!desconectar- Desconecta el bot del canal de voz de este servidor!grabar [proveedor] [nombre_archivo_opcional]- Inicia grabación automática. Elproveedores opcional (openai/voxtral/whisper); si se omite se usa el de por defecto.!parar- Detiene la grabación y genera transcripción!transcribir [proveedor] [nombre_archivo_opcional]- Transcribe archivos de audio adjuntos. Elproveedores opcional; ejemplos:!transcribir voxtral mi_reunion,!transcribir openai.!estado- Muestra el estado actual de conexiones y grabaciones
Los comandos de voz se usan dentro del servidor (en un canal de texto); el bot ya sabe de qué servidor se trata, por eso no hace falta indicar el nombre del servidor.
- Conectar: El bot se conecta a un canal de voz específico
- Grabar: Inicia la grabación automática de todas las voces en el canal
- Procesar: Al detener, el bot procesa automáticamente el audio
- Transcribir: Genera una transcripción con el proveedor elegido (OpenAI
gpt-4o-transcribe, Mistral Voxtral o Whisper local) - Guardar: Los archivos se guardan en la carpeta
recordings/
- Audio: Archivos WAV con el audio grabado
- Transcripción: Archivos Markdown con la transcripción completa
- Metadatos: Información sobre participantes, duración y fecha
- Grabación: WAV, PCM (generado automáticamente)
- Transcripción manual: WAV, MP3, M4A, OGG, FLAC