Token de bot: por qué nunca debe estar en el código
Por qué un token no debe aparecer ni en el código ni en Git, y cómo leerlo de las variables de entorno en Python y Node.js.
El token de un bot es su contraseña. Quien lo tenga puede iniciar sesión en su lugar y actuar en su nombre. El hábito a conservar: el token vive en el entorno del bot, nunca en el código, nunca en Git, nunca en un mensaje.
- El token es una contraseña: no va en el código, ni en Git, ni en un mensaje.
- El código lee DISCORD_TOKEN del entorno e informa con claridad cuando falta el valor.
- Un token expuesto se restablece en el portal de desarrolladores, y el antiguo deja de funcionar.
Por qué el token no va en el código
Un token escrito en bot.py o en index.js acaba en cada copia del proyecto, en el historial de Git, en capturas de pantalla y en las copias de seguridad. Basta una sola filtración en cualquiera de esos lugares para comprometer el bot.
- Un repositorio Git público expone el token a todo el mundo, incluso después de borrar el archivo: el historial lo conserva.
- Si un token se filtra, restablézcalo cuanto antes en el portal de desarrolladores de Discord: el antiguo deja de funcionar.
- Un token pegado en un mensaje de soporte o en un canal de Discord también queda expuesto: no lo copie nunca ahí.
Leer el token desde el entorno
Una variable de entorno es un valor que el sistema pasa al programa al arrancarlo. El código la lee por su nombre, y el token queda fuera del proyecto.
- Python: importe os y después token = os.environ["DISCORD_TOKEN"] y bot.run(token).
- Node.js: client.login(process.env.DISCORD_TOKEN), sin nada más en el archivo.
- En local, un archivo .env puede contener DISCORD_TOKEN=votre_token; añádalo a .gitignore para que nunca se suba a Git.
Comprobar y reaccionar
Un código que lee una variable vacía debe fallar con claridad, en lugar de intentar conectarse con un token vacío. El mensaje de error indica entonces qué falta.
- Python: if not token: raise SystemExit("Falta DISCORD_TOKEN") antes de iniciar el cliente.
- Node.js: if (!process.env.DISCORD_TOKEN) throw new Error("Falta DISCORD_TOKEN");
- Código 4004 de la pasarela o LoginFailure: el token es incorrecto o fue restablecido. Revise la variable sin copiarla en otro sitio.
Por qué ACLClouds mantiene el token fuera del repositorio
El token se introduce en el espacio del bot en el panel de ACLClouds, no en el código. Además, el campo rechaza un token escrito como nombre de variable.
- El token se introduce en el panel del bot, sin escribirse en los archivos del proyecto.
- El campo rechaza un nombre de variable como DISCORD_TOKEN escrito en lugar del token, para evitar un error de copia.
- Acceso SFTP por bot en el puerto 2222: el código se sube por sí solo, sin ningún secreto que colocar en él.
Preguntas frecuentes
¿Puedo poner el token en un archivo de configuración del proyecto?
No, ni siquiera en un archivo que parezca inofensivo. Guárdelo en el entorno o en el panel, y versione solo una plantilla .env.example sin valor.
Publiqué mi token por error. ¿Qué hago?
Restablézcalo de inmediato en el portal de desarrolladores de Discord, actualice la variable en el bot y reinícielo. Borrar el archivo no basta: el historial de Git lo conserva.
¿Es seguro un archivo .env en el servidor?
No debe subirse junto con el código. En el bot, prefiera los valores introducidos en el panel: un .env sigue siendo una herramienta para pruebas en local.