Aby hostować bota nextcord 24/7, uruchom go na maszynie, która stale działa, a nie na swoim komputerze: na VPS z Linuksem z usługą systemd, jeśli hostujesz go sam, albo na planie botów w hostingu botów Discord PlayNHost (od 1,99 USD miesięcznie), gdzie wgrywasz kod, wklejasz token i klikasz Start. W naszym teście bot nextcord 3.2.0 zużył około 47 MB pamięci i dotarł do Discorda około 1,0 sekundy po uruchomieniu. Pierwsza rzecz do sprawdzenia: nextcord 3 wymaga Pythona 3.12 lub nowszego. Kroki w PlayNHost:
- Na stronie hostingu botów Discord kliknij Utwórz serwer przy wybranym planie. W oknie zamówienia na pytanie Na jaką platformę jest Twój bot? odpowiedz Discord i wybierz Python.
- Otwórz swój serwer w panelu. Karta Skonfiguruj swojego bota w sekcji Przegląd otwiera się na kroku Połącz z Discord. Jej pierwszy krok, Co działa, powinien pokazywać Ten bot uruchamia Python Bot.; kliknij ten krok, aby to sprawdzić, a potem Dalej.
- W kroku Połącz z Discord wklej token w polu Wklej token swojego bota, kliknij Połączenie, a potem Tak, dalej.
- W kroku Uprawnienia zaznacz Mój kod tego używa tylko dla uprzywilejowanych intentów, o które prosi twój kod (bot poniżej żadnego nie potrzebuje), kliknij Dodaj na serwer Discord, a potem Dalej.
- W kroku Twój kod kliknij Prześlij pliki i prześlij
bot.pyorazrequirements.txtz wpisemnextcord, albo kliknij Połącz Git. - Na stronie Bot, w panelu Kod, zostaw Runtime ustawione na Python 3.12 (recommended), 3.13 lub 3.14, ustaw Plik startowy, jeśli nie jest to
bot.py, i kliknij Zapisz. - Kliknij Uruchom bota i obserwuj Console. Gdy twój bot wypisze
Logged in as ..., karta pokaże Twój bot jest online na Discordzie.
Ogólne kroki dla Pythona (pakiety, linie konsoli) opisuje Jak hostować bota Discord w Pythonie. Ta strona dotyczy tego, co jest inne w nextcord.
Co zmierzyliśmy
Uruchomiliśmy każdą bibliotekę Discord dla Pythona na własnych serwerach, w tej samej konfiguracji Pythona 3.12, której używa plan botów, z limitem pamięci 1 GB:
| Biblioteka | Wersja | Pamięć w spoczynku | Od startu do odpowiedzi Discorda |
|---|---|---|---|
| nextcord | 3.2.0 | 47 MB | 1,0 s |
| discord.py | 2.7.1 | 48 MB | 1,0 s |
| Pycord | 2.8.1 | 51 MB | 1,1 s |
| disnake | 2.12.2 | 47 MB | 0,9 s |
| hikari | 2.7.0 | 61 MB | 1,3 s |
| Sam Python | 3.12 | 9 MB |
Jak: najmniejszy program, który ładuje bibliotekę i loguje się fałszywym tokenem, zainstalowany tak, jak instalują go nasze serwery. Pamięć to tyle, ile proces zajmował 15 sekund po odrzuceniu tokena przez Discord, a czas startu liczy się od uruchomienia do tej odpowiedzi, więc obejmuje jedną podróż do Discorda. Każda wartość to mediana z trzech uruchomień po uruchomieniu rozgrzewkowym. To dolna granica: bot, który się połączył, dołączył do serwerów i trzyma członków w pamięci podręcznej, zużywa więcej, w stopniu zależnym od bota.
Co to oznacza dla planu: minimalny bot nextcord zużywa niewielką część planu STARTER o pojemności 0,5 GB. Dobierz plan do tego, co trzyma w pamięci twój własny bot, a nie do biblioteki.
Minimalny bot nextcord
Odpowiada na /ping komendą ukośnikową i wypisuje linię gotowości. Token czyta z DISCORD_TOKEN, czyli nazwy, którą panel nadaje twojemu kodowi.
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"])
Zakres wersji w requirements.txt jest celowy: na zbyt starym Pythonie pip zatrzyma się wtedy z błędem, zamiast po cichu zainstalować stary nextcord (zobacz niżej). commands.Bot() nie potrzebuje prefiksu dla komend ukośnikowych. nextcord rejestruje /ping w Discordzie sam przy każdym połączeniu. Linia Logged in as przełącza znacznik w sekcji Przegląd na Online na Discordzie.
Gdy token jest zły
Gdy Discord odrzuci token, nextcord zgłasza ten błąd (tekst, który wypisał nasz bot testowy):
LoginFailure: Improper token has been passed.
Z bot.run() traceback kończy się linią nextcord.errors.LoginFailure: Improper token has been passed. i bot się zatrzymuje. Panel czyta tę linię: znacznik pokazuje Problem z tokenem, a baner mówi Discord nie przyjął tokena twojego bota. Weź nowy token w Discord Developer Portal: twoja aplikacja, Bot, Reset Token (jest pokazywany tylko raz). Kliknij Zastąp token w banerze, potem Zastąp token w panelu Discord, wklej go i uruchom bota ponownie. Zobacz Jak stworzyć bota Discord i zdobyć jego token.
Co host musi wiedzieć o nextcord
- Python 3.12 lub nowszy. Każde wydanie nextcord 3 wymaga Pythona 3.12 lub nowszego. Na Pythonie 3.10 lub 3.11 sama linia
nextcordsprawia, że pip instaluje wersję 2.6.0 z września 2023, ostatnią, która je obsługuje, a kod napisany pod nextcord 3 może wtedy zawieść. Znextcord>=3.2,<4pip odmawia: konsola pokazuje błąd pipa i[PlayNHost] pip could not install everything in requirements.txt., a jeśli nextcord nigdy nie został zainstalowany na serwerze, bot zatrzymuje się zModuleNotFoundError: No module named 'nextcord'. Wybierz 3.12, 3.13 lub 3.14 w Runtime; zmiana działa od następnego startu. - Importuje się nextcord. Instalujesz
nextcordi piszeszimport nextcordorazfrom nextcord.ext import commands. Jeśli przychodzisz z discord.py, przewodnik migracji nextcord każe odinstalować discord.py i zmienićdiscordnanextcordw importach i kodzie. - Nieznane komendy są usuwane. Przy łączeniu nextcord rejestruje nowe komendy, aktualizuje zmienione i usuwa w Discordzie komendy, których twój kod nie definiuje (
rollout_delete_unknown, domyślnie włączone). Jeśli drugi program używa tego samego bota, na przykład kopia testowa na twoim komputerze, komendy definiowane tylko przez ten program są usuwane za każdym razem, gdy łączy się kopia na serwerze. Do testów użyj osobnej aplikacji. - Nie ruszaj on_connect. Ta rejestracja działa we własnym
on_connectbota. Zdefiniowanie@bot.event async def on_connect()zastępuje go i twoje komendy przestają się aktualizować. Kod startowy umieść won_ready, jak wyżej. - Włącz logowanie. nextcord sam nie konfiguruje logowania, a jego własna dokumentacja zdecydowanie zaleca jego skonfigurowanie. Bez niego Python pokazuje tylko ostrzeżenia i błędy;
logging.basicConfig(level=logging.INFO)w bocie powyżej pokazuje też linie informacyjne biblioteki. - Intenty. Domyślne intenty nie zawierają żadnego uprzywilejowanego, a komendy ukośnikowe żadnego nie potrzebują. Komendy z prefiksem wymagają
intents.message_content = Truew twoim kodzie i włączonego Message Content Intent w Developer Portal. Jeśli twój kod o niego prosi, a w Portalu jest wyłączony, Discord odrzuca logowanie. Zobacz Napraw błąd „Used disallowed intents” w bocie Discord.
Hostowanie samodzielne na VPS z Linuksem
Najpierw sprawdź wersję Pythona: python3 --version musi pokazać 3.12 lub nowszą. Ubuntu 24.04 ma 3.12, a Debian 13 ma 3.13; Debian 12 ma 3.11, a Ubuntu 22.04 ma 3.10, obie za stare dla nextcord 3. Potem zainstaluj Pythona, utwórz użytkownika i katalog dla bota oraz zainstaluj nextcord w środowisku wirtualnym:
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
Umieść token w pliku, który może czytać tylko root. Utwórz /etc/nextcord-bot.env poleceniem sudo nano /etc/nextcord-bot.env, wpisz jedną linię, DISCORD_TOKEN= a po nim twój token, zapisz plik i uruchom sudo chmod 600 /etc/nextcord-bot.env.
Następnie utwórz /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
Uruchom go teraz i przy każdym starcie systemu, a potem śledź jego wyjście:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1 sprawia, że print() trafia do dziennika od razu, a nie dopiero po zapełnieniu bufora. Aby zaktualizować bota, skopiuj nowe pliki, uruchom ponownie linię pip install i wykonaj sudo systemctl restart nextcord-bot.
Własny hosting czy plan botów
| Twój własny VPS | Plan botów PlayNHost | |
|---|---|---|
| Python | Wersja dostarczana przez twoją dystrybucję, która dla nextcord 3 musi być 3.12 lub nowsza | Wybierz 3.12, 3.13 lub 3.14 w Runtime |
| Pakiety | Po każdej zmianie uruchamiasz pip install | Instalowane przy starcie po zmianie requirements.txt lub wersji Pythona oraz przy pierwszym starcie dzień po ostatniej instalacji |
| Restarty | Twoja jednostka systemd | Uruchamiany ponownie po awarii; zostaje zatrzymany z podaniem przyczyny, jeśli ulegnie awarii ponownie w ciągu minuty |
| Token | Plik, który chronisz sam | Przechowywany zaszyfrowany, sprawdzany w Discordzie po wklejeniu i przekazywany twojemu kodowi jako DISCORD_TOKEN |
| Błędy | Czytasz dziennik | Baner w konsoli podaje przyczynę, na przykład zły token lub pakiet, który się nie zainstalował |
| Aktualizacje systemu, firewall, SSH | Twoja sprawa | Nie twoje zadanie |
Pytania, które zadają ludzie
Dlaczego pip zainstalował nextcord 2.6.0?
Twój Python to 3.10 lub 3.11. nextcord 3 wymaga 3.12 lub nowszego, więc pip wybiera najnowsze wydanie, które nadal obsługuje twojego Pythona. Ustaw Runtime w panelu Kod na Python 3.12 lub nowszy i uruchom bota ponownie: pakiety zainstalują się od nowa, bo zmieniła się wersja Pythona.
Moje komendy ukośnikowe zniknęły. Dlaczego?
Częsta przyczyna: inny program zalogował się tym samym botem i zsynchronizował własną listę, a nextcord usuwa komendy, których jego kod nie definiuje. Uruchamiaj tylko jedną kopię na aplikację. Podczas testów guild_ids=[your_server_id] przy komendzie lub default_guild_ids w commands.Bot() tworzy ją tylko na tym serwerze, a dokumentacja Discorda mówi, że komendy serwerowe aktualizują się natychmiast.
Czy mogę zachować swój kod discord.py?
Większość. nextcord powstał jako fork discord.py, więc klasy takie jak Client, Intents i ext.commands są tam pod nazwą nextcord. Komendy ukośnikowe się różnią: @bot.slash_command i interaction.send() w nextcord, app_commands w discord.py. Odinstaluj discord.py i zmień importy, jak mówi przewodnik migracji nextcord.
Czy bot nextcord mieści się w najmniejszym planie?
Tak. Przy około 47 MB w naszym teście minimalny bot nextcord zostawia większość planu STARTER o pojemności 0,5 GB dla twojego własnego kodu. Przejdź na wyższy plan, gdy sam bot tego potrzebuje: duże serwery, których członków trzyma w pamięci podręcznej, pliki lub obrazy, które obsługuje, albo dane trzymane w pamięci.
Gotowy, by uruchomić swojego? Wybierz plan w hostingu botów Discord i wgraj swojego bota nextcord.



