Bots de Discord
Bots Discord
Un servicio de tipo Bot Discord está hecho para un proceso que se conecta a Discord y permanece escuchando. No necesita puerto HTTP ni dominio.
Crear un bot
- En tu proyecto, + Nuevo servicio y elige el tipo Bot Discord.
- Selecciona el runtime: JavaScript (Node.js) o Python.
- Conecta el repositorio de GitHub que contiene el código del bot.
- Añade tu token en las variables de entorno (nunca en el código):
DISCORD_TOKEN=tu-token-de-bot
Ejemplo mínimo (discord.js)
import { Client, GatewayIntentBits } from "discord.js";
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once("ready", () => console.log(`Conectado: ${client.user.tag}`));
client.login(process.env.DISCORD_TOKEN);
Ejemplo mínimo (discord.py)
import os, discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
print(f"Conectado: {client.user}")
client.run(os.environ["DISCORD_TOKEN"])
Modo shard
A partir de 2.500 servidores, Discord obliga a repartir la conexión del bot en shards. Activa el modo shard al crear el bot, o más tarde en la pestaña Bot Discord, y elige el número de shards (de 2 a 32). El panel indica el número que Discord recomienda para tu bot, aproximadamente un shard por cada 1.000 servidores.
Cada shard se ejecuta en su propio pod: la carga se reparte entre varias máquinas, y un shard que falla no arrastra a los demás. Los pods arrancan uno tras otro, con unos segundos de diferencia, para respetar el límite de identificación de Discord. Cada pod recibe tres variables:
| Variable | Contenido |
|---|---|
SHARD_ID | Número de shard de este pod (0, 1, 2…) |
SHARD_COUNT | Número total de shards |
SHARDS | [SHARD_ID], en el formato que espera discord.js |
discord.js lee SHARDS y SHARD_COUNT por sí solo: el ejemplo mínimo de arriba funciona sin cambios. No añadas un ShardingManager encima, la plataforma ya cumple esa función.
discord.py: pasa las dos variables al cliente.
import os, discord
from discord.ext import commands
bot = commands.AutoShardedBot(
command_prefix="!",
intents=discord.Intents.default(),
shard_ids=[int(os.environ["SHARD_ID"])],
shard_count=int(os.environ["SHARD_COUNT"]),
)
bot.run(os.environ["DISCORD_TOKEN"])
Cambiar el número de shards reinicia todos los pods del bot, ya que cada uno debe conocer el nuevo total. En la pestaña Logs, un selector permite elegir el shard cuyos logs lees. El autoescalado no está disponible para un bot con shards: siempre funciona con un pod por shard.
Estado de conexión
El panel del servicio muestra el estado de conexión a Discord del bot además del estado del contenedor: ves de inmediato si el bot está en línea en Discord, no solo si el proceso está corriendo.
Puntos a tener en cuenta
- Sin puerto que configurar: un bot no expone un servidor HTTP. Si tu código de todos modos abre un puerto (dashboard integrado…), prefiere un servicio web clásico.
- El proceso debe permanecer vivo: un script que termina provoca un reinicio en bucle. El diagnóstico es el mismo que para los comandos de inicio.
- Los logs del bot están disponibles en tiempo real en la pestaña Logs.