NOWOŚĆ 📢 Ograniczona oferta na start: do 70% zniżki na pierwszy miesiąc, na każdą grę!Zobacz plany

Jak hostować bota nextcord 24/7

Hosting botów DiscordUpdated Nov 6, 20269 min read

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:

  1. 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.
  2. 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.
  3. W kroku Połącz z Discord wklej token w polu Wklej token swojego bota, kliknij Połączenie, a potem Tak, dalej.
  4. 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.
  5. W kroku Twój kod kliknij Prześlij pliki i prześlij bot.py oraz requirements.txt z wpisem nextcord, albo kliknij Połącz Git.
  6. 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.
  7. 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:

BibliotekaWersjaPamięć w spoczynkuOd startu do odpowiedzi Discorda
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
Sam Python3.129 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 nextcord sprawia, ż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ść. Z nextcord>=3.2,<4 pip 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ę z ModuleNotFoundError: 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 nextcord i piszesz import nextcord oraz from nextcord.ext import commands. Jeśli przychodzisz z discord.py, przewodnik migracji nextcord każe odinstalować discord.py i zmienić discord na nextcord w 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_connect bota. Zdefiniowanie @bot.event async def on_connect() zastępuje go i twoje komendy przestają się aktualizować. Kod startowy umieść w on_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 = True w 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 VPSPlan botów PlayNHost
PythonWersja dostarczana przez twoją dystrybucję, która dla nextcord 3 musi być 3.12 lub nowszaWybierz 3.12, 3.13 lub 3.14 w Runtime
PakietyPo każdej zmianie uruchamiasz pip installInstalowane przy starcie po zmianie requirements.txt lub wersji Pythona oraz przy pierwszym starcie dzień po ostatniej instalacji
RestartyTwoja jednostka systemdUruchamiany ponownie po awarii; zostaje zatrzymany z podaniem przyczyny, jeśli ulegnie awarii ponownie w ciągu minuty
TokenPlik, który chronisz samPrzechowywany zaszyfrowany, sprawdzany w Discordzie po wklejeniu i przekazywany twojemu kodowi jako DISCORD_TOKEN
BłędyCzytasz dziennikBaner w konsoli podaje przyczynę, na przykład zły token lub pakiet, który się nie zainstalował
Aktualizacje systemu, firewall, SSHTwoja sprawaNie 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.

Twój bot działa już gdzie indziej? Przenieś go do nas

NASZE OSTATNIE WPISY