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.
TOKEN=<twój-token>Kod bota
Plik app.py z botem, który loguje się do Discorda i odpowiada na komendę /ping:
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.
discord.py
python-dotenvUruchomienie
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 zmain.pyalbobot.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:
discord.py==2.7.1
python-dotenv==1.2.4Regenerowanie 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.txtUruchom 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.txtWgraj 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.