Pe această pagină
Tutorialul ăsta construiește în Python, cu discord.py, un bot de Discord mic, dar adevărat: două comenzi slash, /hello și /add, și un mesaj care îi întâmpină pe membrii noi. Îl testezi pe calculatorul tău, apoi îl pui pe un server Bot gratuit pe Torchlite, ca să rămână online fără calculatorul tău.
Îți trebuie Python 3.12 sau mai nou și un cont de Discord. Nu ai nevoie de experiență cu boți.
Creează botul în Discord
- Deschide Discord Developer Portal și apasă New Application. Numele pe care i-l dai e numele botului.
- Deschide Bot din meniul din stânga și apasă Reset Token. Copiază token-ul și ține-l într-un loc privat.
- Mai jos, pe aceeași pagină, pornește Server Members Intent. Mesajul de bun venit are nevoie de el; comenzile slash nu.
- Deschide OAuth2, apoi URL Generator. Bifează bot și applications.commands, iar la Bot Permissions bifează Send Messages.
- Deschide URL-ul generat, alege serverul tău de Discord și apasă Authorize.
Pregătește proiectul
Fă un folder pentru bot cu două fișiere. Primul e requirements.txt, lista de pachete:
discord.pyInstalează-l o dată pe calculator:
pip install -r requirements.txtScrie botul
Al doilea fișier e bot.py:
import os
import discord
from discord import app_commands
class Bot(discord.Client):
def __init__(self):
intents = discord.Intents.default()
intents.members = True # for on_member_join; switched on in the portal
super().__init__(intents=intents)
self.tree = app_commands.CommandTree(self)
async def setup_hook(self):
# Sends the slash commands to Discord once, at startup.
await self.tree.sync()
bot = Bot()
@bot.event
async def on_ready():
print(f"Online as {bot.user} in {len(bot.guilds)} server(s).")
@bot.tree.command(name="hello", description="Say hello")
async def hello(interaction: discord.Interaction):
await interaction.response.send_message(f"Hello, {interaction.user.mention}!")
@bot.tree.command(name="add", description="Add two numbers")
@app_commands.describe(a="The first number", b="The second number")
async def add(interaction: discord.Interaction, a: int, b: int):
await interaction.response.send_message(f"{a} + {b} = {a + b}")
@bot.event
async def on_member_join(member: discord.Member):
channel = member.guild.system_channel
if channel is not None:
await channel.send(f"Welcome to {member.guild.name}, {member.mention}!")
bot.run(os.environ["DISCORD_TOKEN"])Ce face fiecare parte:
- Intent-urile îi spun lui Discord ce evenimente vrea botul. Cele implicite acoperă comenzile slash;
membersadaugă evenimentele de intrare pe server. CommandTreeține comenzile slash, iartree.sync()le înregistrează la Discord când pornește botul.@bot.tree.commandtransformă o funcție într-o comandă slash. Tipurile, caa: int, devin opțiunile comenzii, iar Discord verifică singur ce se introduce.on_member_joinrulează când intră cineva și scrie în canalul de sistem al serverului, cel setat la Server Settings, Overview.- Token-ul vine din variabila de mediu
DISCORD_TOKEN, niciodată din cod.
Poți traduce în română textele pe care le trimite botul, de exemplu Hello în Salut; restul codului rămâne la fel.
Rulează-l pe calculator
Setează token-ul pentru sesiunea asta de terminal, apoi pornește botul. Pe macOS sau Linux:
export DISCORD_TOKEN="paste-your-token-here"
python bot.pyÎn Windows PowerShell:
$env:DISCORD_TOKEN="paste-your-token-here"
python bot.pyTerminalul afișează Online as YourBot#1234 in 1 server(s). Scrie / pe serverul tău de Discord și apar cele două comenzi. Prima dată, comenzile slash pot avea nevoie de câteva minute ca să apară.
Găzduiește-l gratuit pe Torchlite
Botul se oprește imediat ce închizi terminalul. Ca să rămână pornit:
- Pe Creează serverul, alege planul Bot și Discord bot (Python).
- În panel, deschide Startup și pune token-ul în Bot token.
- Deschide Files, șterge fișierele botului de start și urcă-ți
bot.pyșirequirements.txt. Verifică la Startup că Main file ebot.py. - Apasă Start în Console. Serverul instalează
discord.pydinrequirements.txtși îți pornește botul.
Ca să faci deploy din GitHub, încât un push și un restart să fie tot deploy-ul, urmează ghidul pentru boți de Discord. Planul Bot dă 512 MB RAM și îți cere un Renew o dată la 24 de ore; hostingul pentru boți de Discord are detaliile.
Ține-l sănătos
Câteva obiceiuri te scapă de cele mai multe probleme odată ce botul e folosit de oameni reali:
- Răspunde în 3 secunde. Discord afișează „The application did not respond” dacă o comandă nu e confirmată la timp. Pentru orice operație lentă, ca o cerere web sau o interogare în baza de date, apelează întâi
await interaction.response.defer(), apoi trimite rezultatul cuawait interaction.followup.send(...). - Prinde erorile la fiecare comandă. Pune codul riscant în
tryșiexceptși răspunde cu un mesaj scurt, în loc să lași comanda să eșueze fără niciun semn. Afișează eroarea cuprint, ca să apară în Console din panel. - Ține datele pe disc, nu în memorie. Tot ce e în variabilele Python se pierde când botul repornește, iar pe un server gratuit repornește de fiecare dată când se ratează o reînnoire. Păstrează ce contează în baza de date MySQL sau într-un fișier SQLite.
- Nu inunda canalele. Multe mesaje trimise într-o buclă se lovesc de limitele Discord; discord.py așteaptă până trec, dar între timp botul pare blocat. Strânge textul într-un singur mesaj.
- Urmărește memoria. 512 MB ajung din plin, dar dacă ții în memorie fiecare membru al unui server mare, se adună. Pornește doar intent-urile pe care chiar le folosești.
Ce urmează
- Mai multe comenzi: copiază blocul
add.str,int,float,bool,discord.Memberșidiscord.Rolemerg toate ca tipuri de opțiuni. - Comenzi doar pentru admini: pune
@app_commands.default_permissions(administrator=True)deasupra unei comenzi. - O bază de date: serverul tău Bot include o bază de date MySQL, sau păstrează lucrurile simple cu un fișier SQLite lângă
bot.py. - Împarte codul: când fișierul crește, mută comenzile în fișiere separate cu extensiile și cog-urile din discord.py.
Probleme frecvente
KeyError: 'DISCORD_TOKEN'
Variabila de mediu nu e setată în terminalul ăsta, sau pe Torchlite câmpul Bot token e gol. Setează-l și pornește din nou.
PrivilegedIntentsRequired
Codul cere intent-ul members, dar Server Members Intent e oprit în Developer Portal. Pornește-l, sau șterge linia intents.members = True și mesajul de bun venit.
Comenzile slash nu apar
Așteaptă câteva minute după prima pornire și verifică dacă URL-ul de invitare a inclus applications.commands. Repornește botul o dată.
Te-ai blocat la un pas?
Întreabă pe forum. Întrebarea ta trimite înapoi la ghid, ca cine răspunde să știe unde ai rămas.
Despre autor
Echipa Torchlite
Oamenii care administrează Torchlite
Construim și administrăm panelul Torchlite și nodurile. Fiecare ghid e verificat pe serverele noastre înainte să apară și actualizat când se schimbă panelul.

