NUEVO 📢 Oferta de lanzamiento limitada: ¡hasta un 70% de descuento en tu primer mes, en todos los juegos!Ver planes

Cómo alojar un bot de nextcord 24/7

Hosting de bots de DiscordUpdated Nov 6, 202611 min read

Para alojar un bot de nextcord 24/7, ejecútalo en una máquina que siempre esté encendida en lugar de en tu PC: un VPS Linux con un servicio systemd si lo alojas tú mismo, o un plan de bots en el hosting de bots de Discord de PlayNHost (desde US$1.99 al mes), donde subes tu código, pegas el token y pulsas Iniciar. En nuestra prueba, un bot con nextcord 3.2.0 usó unos 47 MB de memoria y llegó a Discord unos 1.0 segundos después de lanzarse. Lo primero que debes comprobar: nextcord 3 necesita Python 3.12 o superior. Los pasos en PlayNHost:

  1. En la página de hosting de bots de Discord, haz clic en Crear servidor en un plan. En la ventana del pedido, responde con Discord a ¿Para qué plataforma es tu bot? y elige Python.
  2. Abre tu servidor en el panel. La tarjeta Configura tu bot en Resumen se abre en Conectar con Discord. Su primer paso, Qué se ejecuta, debería decir Este bot ejecuta Python Bot.; haz clic en ese paso para comprobarlo y luego en Continuar.
  3. En Conectar con Discord, pega tu token en Pega el token de tu bot, haz clic en Conexión y luego en Sí, continuar.
  4. En Permisos, marca Mi código lo usa solo para los intents privilegiados que pida tu código (el bot de abajo no necesita ninguno), haz clic en Añadir a un servidor de Discord y luego en Continuar.
  5. En Tu código, haz clic en Subir archivos y sube bot.py y un requirements.txt que incluya nextcord, o haz clic en Conectar Git.
  6. En la página Bot, panel Código, deja el Entorno de ejecución en Python 3.12 (recommended), 3.13 o 3.14, define el Archivo de entrada si no es bot.py y haz clic en Guardar.
  7. Haz clic en Iniciar bot y observa la Console. Cuando tu bot imprima Logged in as ..., la tarjeta dirá Tu bot está en línea en Discord.

Los pasos generales de Python (paquetes, líneas de la consola) están en Cómo alojar un bot de Discord en Python. Esta página cubre lo que es diferente con nextcord.

Qué medimos

Ejecutamos cada biblioteca de Discord para Python en nuestros propios servidores, con la misma configuración de Python 3.12 que usa un plan de bots, con un límite de memoria de 1 GB:

BibliotecaVersiónMemoria en reposoDel inicio a la respuesta de Discord
nextcord3.2.047 MB1.0 s
discord.py2.7.148 MB1.0 s
Pycord2.8.151 MB1.1 s
disnake2.12.247 MB0.9 s
hikari2.7.061 MB1.3 s
Python solo3.129 MB

Cómo: el programa más pequeño que carga la biblioteca e inicia sesión con un token falso, instalado como lo instalan nuestros servidores. La memoria es la que retenía el proceso 15 segundos después de que Discord rechazara el token, y el tiempo de inicio va desde el lanzamiento hasta esa respuesta, así que incluye un viaje a Discord. Cada cifra es la mediana de tres ejecuciones tras una ejecución de calentamiento. Es el mínimo: un bot que se ha conectado, se ha unido a servidores y guarda miembros en caché usa más, en una cantidad que depende del bot.

Qué significa para el plan: un bot mínimo de nextcord usa una pequeña parte del plan STARTER de 0.5 GB. Dimensiona el plan según lo que tu propio bot guarda en memoria, no según la biblioteca.

Un bot mínimo de nextcord

Responde a /ping con un comando de barra e imprime una línea de listo. Lee el token de DISCORD_TOKEN, el nombre que el panel da a tu código.

requirements.txt

nextcord>=3.2,<4

bot.py

import logging
import os

import nextcord
from nextcord.ext import commands

logging.basicConfig(level=logging.INFO)

bot = commands.Bot()


@bot.event
async def on_ready():
    print(f"Logged in as {bot.user}")


@bot.slash_command(description="Check that the bot answers")
async def ping(interaction: nextcord.Interaction):
    await interaction.send("Pong!")


bot.run(os.environ["DISCORD_TOKEN"])

El rango de versiones en requirements.txt es a propósito: con un Python demasiado antiguo, pip se detiene con un error en lugar de instalar en silencio un nextcord antiguo (mira abajo). commands.Bot() no necesita prefijo para los comandos de barra. nextcord registra /ping en Discord por sí mismo cada vez que se conecta. La línea Logged in as es la que cambia el indicador de Resumen a En línea en Discord.

Si el token es incorrecto

Cuando Discord rechaza el token, nextcord lanza este error (el texto que imprimió nuestro bot de prueba):

LoginFailure: Improper token has been passed.

Con bot.run() termina un traceback como nextcord.errors.LoginFailure: Improper token has been passed. y el bot se detiene. El panel lee esa línea: el indicador muestra Problema con el token y un aviso dice Discord no aceptó el token de tu bot. Consigue un token nuevo en el Discord Developer Portal: tu aplicación, Bot, Reset Token (se muestra una sola vez). Haz clic en Reemplazar el token en el aviso, luego en Reemplazar token en el panel Discord, pégalo y vuelve a iniciar el bot. Mira Cómo crear un bot de Discord y obtener su token.

Lo que un host debe saber sobre nextcord

  • Python 3.12 o superior. Todas las versiones de nextcord 3 requieren Python 3.12 o posterior. En Python 3.10 o 3.11, una línea nextcord sin versión hace que pip instale la 2.6.0, de septiembre de 2023, la última versión que los admite, y el código escrito para nextcord 3 puede fallar. Con nextcord>=3.2,<4 pip se niega: la consola muestra el error de pip y [PlayNHost] pip could not install everything in requirements.txt., y si nextcord nunca se instaló en el servidor, el bot se detiene con ModuleNotFoundError: No module named 'nextcord'. Elige 3.12, 3.13 o 3.14 en Entorno de ejecución; el cambio se aplica en el siguiente inicio.
  • El import es nextcord. Instalas nextcord y escribes import nextcord y from nextcord.ext import commands. Si vienes de discord.py, la guía de migración de nextcord dice que desinstales discord.py y cambies discord por nextcord en tus imports y en tu código.
  • Los comandos que no conoce se borran. Al conectarse, nextcord registra los comandos nuevos, actualiza los modificados y borra en Discord los comandos que tu código no define (rollout_delete_unknown, activado por defecto). Si un segundo programa usa el mismo bot, como una copia de prueba en tu PC, los comandos que solo define ese programa se eliminan cada vez que se conecta la copia del servidor. Usa una aplicación aparte para las pruebas.
  • Deja on_connect en paz. Ese registro se ejecuta en el on_connect propio del bot. Si defines @bot.event async def on_connect(), lo reemplazas y tus comandos dejan de actualizarse. Pon el código de arranque en on_ready, como arriba.
  • Activa el logging. nextcord no configura el logging por sí mismo, y su propia documentación recomienda encarecidamente configurarlo. Sin él, Python solo muestra advertencias y errores; logging.basicConfig(level=logging.INFO) en el bot de arriba también muestra las líneas informativas de la biblioteca.
  • Intents. Los intents por defecto no incluyen ninguno privilegiado, y los comandos de barra no necesitan ninguno. Los comandos con prefijo necesitan intents.message_content = True en tu código y Message Content Intent activado en el Developer Portal. Si tu código lo pide mientras está desactivado en el Portal, Discord rechaza el inicio de sesión. Mira Arregla "Used disallowed intents" en tu bot de Discord.

Alójalo tú mismo en un VPS Linux

Comprueba primero la versión de Python: python3 --version debe decir 3.12 o superior. Ubuntu 24.04 incluye 3.12 y Debian 13 incluye 3.13; Debian 12 incluye 3.11 y Ubuntu 22.04 incluye 3.10, ambas demasiado antiguas para nextcord 3. Después instala Python, crea un usuario y una carpeta para el bot e instala nextcord en un entorno virtual:

sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/nextcord-bot bot
sudo cp bot.py requirements.txt /opt/nextcord-bot/
sudo chown bot: /opt/nextcord-bot/bot.py /opt/nextcord-bot/requirements.txt
sudo -u bot python3 -m venv /opt/nextcord-bot/venv
sudo -u bot /opt/nextcord-bot/venv/bin/pip install -r /opt/nextcord-bot/requirements.txt

Guarda el token en un archivo que solo root pueda leer. Crea /etc/nextcord-bot.env con sudo nano /etc/nextcord-bot.env, escribe una línea, DISCORD_TOKEN= seguido de tu token, guárdalo y ejecuta sudo chmod 600 /etc/nextcord-bot.env.

Luego crea /etc/systemd/system/nextcord-bot.service:

[Unit]
Description=nextcord Discord bot
Wants=network-online.target
After=network-online.target

[Service]
User=bot
WorkingDirectory=/opt/nextcord-bot
EnvironmentFile=/etc/nextcord-bot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/nextcord-bot/venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Inícialo ahora y en cada arranque, y después sigue su salida:

sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f

PYTHONUNBUFFERED=1 hace que print() llegue al journal al instante en lugar de cuando se llena un búfer. Para actualizar el bot, copia los archivos nuevos, vuelve a ejecutar la línea pip install y ejecuta sudo systemctl restart nextcord-bot.

Alojarlo tú o un plan de bots

Tu propio VPSUn plan de bots de PlayNHost
PythonLa versión que incluya tu distribución, que debe ser 3.12 o superior para nextcord 3Elige 3.12, 3.13 o 3.14 en Entorno de ejecución
PaquetesEjecutas pip install tras cada cambioSe instalan en un inicio posterior a un cambio en requirements.txt o en la versión de Python, y en el primer inicio un día después de la última instalación
ReiniciosTu unidad systemdSe inicia de nuevo tras un fallo; queda detenido con el motivo si vuelve a fallar en menos de un minuto
El tokenUn archivo que proteges túGuardado cifrado, comprobado con Discord al pegarlo y entregado a tu código como DISCORD_TOKEN
ErroresLees el journalEl aviso de la consola nombra la causa, como un token incorrecto o un paquete que no se instaló
Actualizaciones del sistema, firewall, SSHTe toca a tiNo es tu trabajo

Preguntas frecuentes

¿Por qué pip instaló nextcord 2.6.0?

Tu Python es 3.10 o 3.11. nextcord 3 necesita 3.12 o superior, así que pip elige la versión más reciente que aún admite tu Python. Define el Entorno de ejecución en el panel Código como Python 3.12 o superior y vuelve a iniciar el bot: los paquetes se instalan de nuevo porque la versión de Python cambió.

Mis comandos de barra desaparecieron. ¿Por qué?

Una causa frecuente: otro programa inició sesión con el mismo bot y sincronizó su propia lista, y nextcord borra los comandos que su código no define. Ejecuta solo una copia por aplicación. Mientras pruebas, guild_ids=[your_server_id] en un comando, o default_guild_ids en commands.Bot(), lo crea solo en ese servidor, y la documentación de Discord dice que los comandos de servidor se actualizan al instante.

¿Puedo conservar mi código de discord.py?

La mayor parte. nextcord empezó como un fork de discord.py, así que clases como Client, Intents y ext.commands están ahí con el nombre nextcord. Los comandos de barra son distintos: @bot.slash_command e interaction.send() en nextcord, app_commands en discord.py. Desinstala discord.py y cambia los imports, como dice la guía de migración de nextcord.

¿Cabe un bot de nextcord en el plan más pequeño?

Sí. Con unos 47 MB en nuestra prueba, un bot mínimo de nextcord deja la mayor parte del plan STARTER de 0.5 GB para tu propio código. Sube de plan cuando tu bot lo necesite: servidores grandes cuyos miembros guarda en caché, archivos o imágenes que procesa, o datos que mantiene en memoria.

¿Listo para ejecutar el tuyo? Elige un plan en hosting de bots de Discord y sube tu bot de nextcord.

¿Ya tienes tu bot en otro proveedor? Tráelo con nosotros

NUESTROS ÚLTIMOS BLOGS