NUOVO 📢 Offerta di lancio limitata: fino al 70% di sconto sul tuo primo mese, per tutti i giochi!Vedi i piani

Come ospitare un bot nextcord 24/7

Hosting di bot DiscordUpdated Nov 6, 202611 min read

Per ospitare un bot nextcord 24/7, eseguilo su una macchina sempre accesa invece che sul tuo PC: un VPS Linux con un servizio systemd se lo ospiti tu, oppure un piano bot su PlayNHost Discord bot hosting (da 1,99 US$ al mese), dove carichi il codice, incolli il token e premi Avvia. Nel nostro test un bot nextcord 3.2.0 ha usato circa 47 MB di memoria ed è arrivato a Discord circa 1,0 secondi dopo l’avvio. La prima cosa da controllare: nextcord 3 richiede Python 3.12 o successivo. I passaggi su PlayNHost:

  1. Nella pagina Discord bot hosting, clicca su Crea server su un piano. Nella finestra dell’ordine, rispondi a Per quale piattaforma è il tuo bot? con Discord e scegli Python.
  2. Apri il tuo server nel pannello. La scheda Configura il tuo bot nella Panoramica si apre su Connetti a Discord. Il primo passaggio, Cosa viene eseguito, dovrebbe indicare Questo bot esegue Python Bot.; clicca su quel passaggio per controllarlo, poi su Continua.
  3. In Connetti a Discord, incolla il token in Incolla il token del bot, clicca su Connessione, poi su Sì, continua.
  4. In Permessi, spunta Il mio codice lo usa solo per gli intent privilegiati che il tuo codice richiede (il bot qui sotto non ne richiede nessuno), clicca su Aggiungi a un server Discord, poi su Continua.
  5. In Il tuo codice, clicca su Carica i file e carica bot.py e un requirements.txt che elenchi nextcord, oppure clicca su Collega Git.
  6. Nella pagina Bot, riquadro Codice, lascia il Runtime su Python 3.12 (recommended), 3.13 o 3.14, imposta il File di avvio se non è bot.py, e clicca su Salva.
  7. Clicca su Avvia il bot e guarda la Console. Quando il tuo bot stampa Logged in as ..., la scheda dice Il tuo bot è online su Discord.

I passaggi generali per Python (pacchetti, righe della console) sono in Come ospitare un bot Discord Python. Questa pagina tratta ciò che cambia con nextcord.

Cosa abbiamo misurato

Abbiamo eseguito ogni libreria Discord per Python sui nostri server, nella stessa configurazione Python 3.12 usata da un piano bot, con un limite di memoria di 1 GB:

LibreriaVersioneMemoria a riposoDall’avvio alla risposta di 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 da solo3.129 MB

Come: il programma più piccolo che carica la libreria e accede con un token finto, installato nel modo in cui lo installano i nostri server. La memoria è quella occupata dal processo 15 secondi dopo il rifiuto del token da parte di Discord, e il tempo di avvio va dal lancio a quella risposta, quindi include un viaggio fino a Discord. Ogni valore è la mediana di tre esecuzioni dopo una di riscaldamento. È il minimo: un bot che si è connesso, è entrato nei server e tiene i membri in cache usa di più, in misura che dipende dal bot.

Cosa significa per il piano: un bot nextcord minimo usa una piccola parte del piano STARTER da 0,5 GB. Dimensiona il piano in base a ciò che il tuo bot tiene in memoria, non in base alla libreria.

Un bot nextcord minimo

Risponde a /ping con un comando slash e stampa una riga di avvio completato. Legge il token da DISCORD_TOKEN, il nome che il pannello dà al tuo codice.

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"])

L’intervallo di versioni in requirements.txt è voluto: con un Python troppo vecchio, pip si ferma con un errore invece di installare in silenzio un vecchio nextcord (vedi sotto). commands.Bot() non richiede un prefisso per i comandi slash. nextcord registra /ping su Discord da solo a ogni connessione. La riga Logged in as è quella che porta l’indicatore nella Panoramica su Online su Discord.

Se il token è sbagliato

Quando Discord rifiuta il token, nextcord solleva questo errore (il testo stampato dal nostro bot di prova):

LoginFailure: Improper token has been passed.

Con bot.run() un traceback termina con nextcord.errors.LoginFailure: Improper token has been passed. e il bot si ferma. Il pannello legge quella riga: l’indicatore mostra Problema col token e un avviso dice Discord non ha accettato il token del bot. Ottieni un nuovo token nel Discord Developer Portal: la tua applicazione, Bot, Reset Token (viene mostrato una sola volta). Clicca su Sostituisci il token nell’avviso, poi su Sostituisci il token nel riquadro Discord, incollalo e riavvia il bot. Vedi Come creare un bot Discord e ottenere il suo token.

Cosa deve sapere un host su nextcord

  • Python 3.12 o successivo. Ogni versione di nextcord 3 richiede Python 3.12 o successivo. Su Python 3.10 o 3.11, una semplice riga nextcord fa installare a pip la 2.6.0, di settembre 2023, l’ultima versione che li supporta, e il codice scritto per nextcord 3 può poi non funzionare. Con nextcord>=3.2,<4 pip rifiuta: la console mostra l’errore di pip e [PlayNHost] pip could not install everything in requirements.txt., e se nextcord non è mai stato installato sul server, il bot si ferma con ModuleNotFoundError: No module named 'nextcord'. Scegli 3.12, 3.13 o 3.14 in Runtime; la modifica si applica al prossimo avvio.
  • L’import è nextcord. Installi nextcord e scrivi import nextcord e from nextcord.ext import commands. Se vieni da discord.py, la guida alla migrazione di nextcord dice di disinstallare discord.py e di cambiare discord in nextcord negli import e nel codice.
  • I comandi che non conosce vengono eliminati. Quando si connette, nextcord registra i comandi nuovi, aggiorna quelli modificati ed elimina su Discord i comandi che il tuo codice non definisce (rollout_delete_unknown, attivo per impostazione predefinita). Se un secondo programma usa lo stesso bot, come una copia di prova sul tuo PC, i comandi definiti solo da quel programma vengono rimossi ogni volta che si connette la copia sul server. Usa un’applicazione separata per i test.
  • Non toccare on_connect. Quella registrazione avviene nell’on_connect del bot stesso. Definire @bot.event async def on_connect() lo sostituisce e i tuoi comandi smettono di aggiornarsi. Metti il codice di avvio in on_ready, come sopra.
  • Attiva il logging. nextcord non configura il logging da solo, e la sua documentazione raccomanda caldamente di configurarlo. Senza, Python mostra solo avvisi ed errori; logging.basicConfig(level=logging.INFO) nel bot qui sopra mostra anche le righe informative della libreria.
  • Intent. Gli intent predefiniti non includono nessun intent privilegiato, e i comandi slash non ne richiedono. I comandi con prefisso richiedono intents.message_content = True nel tuo codice e Message Content Intent attivato nel Developer Portal. Se il tuo codice lo richiede mentre nel Portal è disattivato, Discord rifiuta l’accesso. Vedi Risolvi "Used disallowed intents" sul tuo bot Discord.

Ospitarlo da solo su un VPS Linux

Controlla prima la versione di Python: python3 --version deve indicare 3.12 o successiva. Ubuntu 24.04 include la 3.12 e Debian 13 include la 3.13; Debian 12 include la 3.11 e Ubuntu 22.04 include la 3.10, entrambe troppo vecchie per nextcord 3. Poi installa Python, crea un utente e una cartella per il bot e installa nextcord in un ambiente virtuale:

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

Metti il token in un file leggibile solo da root. Crea /etc/nextcord-bot.env con sudo nano /etc/nextcord-bot.env, scrivi una riga, DISCORD_TOKEN= seguito dal tuo token, salva ed esegui sudo chmod 600 /etc/nextcord-bot.env.

Poi 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

Avvialo subito e a ogni avvio della macchina, poi segui il suo output:

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

PYTHONUNBUFFERED=1 fa arrivare print() nel journal subito invece di quando si riempie un buffer. Per aggiornare il bot, copia i nuovi file, esegui di nuovo la riga pip install e sudo systemctl restart nextcord-bot.

Self-hosting o piano bot

Il tuo VPSUn piano bot PlayNHost
PythonLa versione fornita dalla tua distribuzione, che per nextcord 3 deve essere 3.12 o successivaScegli 3.12, 3.13 o 3.14 in Runtime
PacchettiEsegui pip install dopo ogni modificaInstallati a un avvio successivo a una modifica di requirements.txt o della versione di Python, e al primo avvio un giorno dopo l’ultima installazione
RiavviiLa tua unit systemdRiavviato dopo un arresto anomalo; lasciato fermo con il motivo se si ferma di nuovo entro un minuto
Il tokenUn file che proteggi tuSalvato cifrato, verificato con Discord quando lo incolli, consegnato al tuo codice come DISCORD_TOKEN
ErroriLeggi il journalIl banner della console indica la causa, come un token sbagliato o un pacchetto non installato
Aggiornamenti di sistema, firewall, SSHSpettano a teNon sono un tuo compito

Domande frequenti

Perché pip ha installato nextcord 2.6.0?

Il tuo Python è 3.10 o 3.11. nextcord 3 richiede la 3.12 o successiva, quindi pip sceglie la versione più recente che supporta ancora il tuo Python. Imposta il Runtime nel riquadro Codice su Python 3.12 o successivo e riavvia il bot: i pacchetti vengono installati di nuovo perché la versione di Python è cambiata.

I miei comandi slash sono scomparsi. Perché?

Una causa frequente: un altro programma ha effettuato l’accesso con lo stesso bot e ha sincronizzato il proprio elenco, e nextcord elimina i comandi che il suo codice non definisce. Esegui una sola copia per applicazione. Durante i test, guild_ids=[your_server_id] su un comando, oppure default_guild_ids su commands.Bot(), lo crea solo in quel server, e la documentazione di Discord dice che i comandi del server si aggiornano subito.

Posso tenere il mio codice discord.py?

Quasi tutto. nextcord è nato come fork di discord.py, quindi classi come Client, Intents e ext.commands ci sono, con il nome nextcord. I comandi slash sono diversi: @bot.slash_command e interaction.send() in nextcord, app_commands in discord.py. Disinstalla discord.py e cambia gli import, come dice la guida alla migrazione di nextcord.

Un bot nextcord sta nel piano più piccolo?

Sì. Con circa 47 MB nel nostro test, un bot nextcord minimo lascia la maggior parte del piano STARTER da 0,5 GB al tuo codice. Passa a un piano superiore quando serve al bot stesso: server grandi di cui tiene i membri in cache, file o immagini che gestisce, o dati che tiene in memoria.

Pronto a far girare il tuo? Scegli un piano su Discord bot hosting e carica il tuo bot nextcord.

Il tuo bot è già ospitato altrove? Spostalo da noi

ULTIMI ARTICOLI