Przejdź do treści

Jak uruchomić bota Discord w Pythonie na hostingu

Uruchom bota Discord w Pythonie (discord.py) na serwerze Hostero: pliki bota, token w .env, biblioteki z requirements.txt, pyproject.toml i uv.

Serwer do bota z Pythonem przy każdym starcie instaluje biblioteki i uruchamia plik bota. Wystarczy, że wgrasz kod, token i listę bibliotek. Przykład używa biblioteki discord.py (otwiera się w nowej karcie), ale tak samo uruchomisz bota w innej bibliotece, np. nextcord albo py-cord.

Zanim zaczniesz

Potrzebujesz bota utworzonego w Discord Developer Portal i jego tokenu. Jak je zdobyć, opisuje artykuł Jak utworzyć bota Discord.

Pliki bota

W zakładce Pliki utwórz trzy pliki: kliknij Nowy plik, wklej treść, kliknij Stwórz plik i wpisz nazwę. Pliki z komputera wgrasz przyciskiem Wgraj plik albo przez SFTP.

Token w pliku .env

Token trzymaj w pliku .env, a nie w kodzie. Dzięki temu nie wycieknie, gdy pokażesz komuś kod albo wrzucisz go na GitHuba.

.env
TOKEN=<twój-token>

Kod bota

Plik app.py z botem, który loguje się do Discorda i odpowiada na komendę /ping:

app.py
import os

import discord
from discord import app_commands
from dotenv import load_dotenv

load_dotenv()


class MojBot(discord.Client):
    def __init__(self):
        super().__init__(intents=discord.Intents.default())
        self.tree = app_commands.CommandTree(self)

    async def setup_hook(self):
        await self.tree.sync()


bot = MojBot()


@bot.event
async def on_ready():
    print(f"Zalogowano jako {bot.user}")


@bot.tree.command(name="ping", description="Sprawdza, czy bot odpowiada")
async def ping(interaction: discord.Interaction):
    await interaction.response.send_message(f"Pong! {round(bot.latency * 1000)} ms")


bot.run(os.getenv("TOKEN"))

Lista bibliotek

Plik requirements.txt z bibliotekami, po jednej w linii. python-dotenv wczytuje token z pliku .env.

requirements.txt
discord.py
python-dotenv

Uruchomienie

Kliknij Uruchom w zakładce Konsola. Serwer zainstaluje biblioteki z requirements.txt i uruchomi app.py. Gdy zobaczysz Zalogowano jako, bot jest online na Discordzie.

Ustawienia serwera

W zakładce Parametry startowe zmienisz, jak serwer uruchamia bota:

  • Wersja środowiska (Obraz Docker): wersja Pythona, od 2.7 do 3.12. discord.py wymaga co najmniej 3.8. Zmiana działa po ponownym uruchomieniu serwera.
  • Plik aplikacji py: plik, który serwer uruchamia. Domyślnie app.py. Jeśli twój bot startuje z main.py albo bot.py, wpisz tu tę nazwę.
  • Plik zależności: plik z listą bibliotek. Domyślnie requirements.txt.
  • Dodatkowe pakiety Python: biblioteki do zainstalowania bez pliku zależności, oddzielone spacjami, np. requests aiohttp.

Biblioteki

Wersje bibliotek

Serwer przy każdym starcie aktualizuje biblioteki do najnowszych wersji, na jakie pozwala plik zależności. Jeśli nie podasz wersji, nowe wydanie biblioteki może po restarcie zepsuć bota. Przypnij wersje, które masz sprawdzone:

requirements.txt
discord.py==2.7.1
python-dotenv==1.2.4

Regenerowanie requirements.txt

Jeśli piszesz bota u siebie na komputerze w środowisku wirtualnym (venv), wygeneruj listę bibliotek z wersjami, które masz zainstalowane:

pip freeze > requirements.txt

Uruchom tę komendę w środowisku tylko tego bota. W globalnym Pythonie trafią do pliku wszystkie biblioteki z komputera. Potem wgraj nowy requirements.txt w zakładce Pliki i zrestartuj serwer.

pyproject.toml i uv

Serwer instaluje biblioteki tylko z pliku w formacie requirements.txt. Jeśli projekt używa pyproject.toml i uv (otwiera się w nowej karcie), wygeneruj z niego requirements.txt na komputerze:

uv export --format requirements.txt --no-dev --no-emit-project --output-file requirements.txt

Wgraj ten plik razem z kodem. Po każdej zmianie zależności w pyproject.toml wygeneruj go jeszcze raz.

Najczęstsze problemy

ModuleNotFoundError: No module named …

Brakuje biblioteki. Dopisz ją do requirements.txt albo do pola Dodatkowe pakiety Python i uruchom serwer ponownie. Nazwa do instalacji czasem różni się od nazwy w import, np. import dotenv instalujesz jako python-dotenv.

discord.errors.LoginFailure: Improper token has been passed

Token jest błędny albo został zresetowany. Wygeneruj nowy w Developer Portal i wpisz go w .env po TOKEN=, bez cudzysłowów i spacji.

PrivilegedIntentsRequired

Kod prosi o intencję, która nie jest włączona w portalu, np. message_content. Włącz ją w Developer Portal w zakładce Bot, w sekcji Privileged Gateway Intents.

Serwer uruchamia zły plik albo zgłasza, że nie ma app.py

Sprawdź pole Plik aplikacji py w Parametrach startowych. Musi zawierać nazwę pliku, od którego startuje bot.

Komenda /ping nie pojawia się na serwerze Discord

Bot rejestruje komendy przy starcie. Odśwież Discorda skrótem Ctrl + R. Jeśli dalej ich nie ma, zaproś bota jeszcze raz linkiem z zakresem applications.commands.