Ako vytvoriť Python Discord bot
Vlastný server Discord môže byť veľmi náročný na správu, preto sú populárne boty, ktoré sa starajú o administratívne funkcie. Vlastného bota si môžete ľahko navrhnúť pomocou knižnice Python discord.py a základných znalostí jazyka Python.
Krok za krokom k vášmu vlastnému Python Discord botovi
Než začnete programovať svojho bota, mali by ste si vytvoriť Discord bota. S Discordom si môžete vytvoriť vlastnú aplikáciu a keď tak urobíte, nič nebude stáť v ceste vášmu Discord botovi. Kód, ktorý potrebujete pre svoj Discord bot, závisí od úloh, ktoré chcete automatizovať. Bot prezentovaný v tomto tutoriáli je určený na pridávanie rolí v rámci Discord servera.
Krok 1: nainštalujte discord.py
Na vytvorenie bota je nevyhnutným nástrojom knižnica Python discord.py. Pred začatím ju musíte nainštalovať do svojho systému pomocou pip, ako je to u Pythonu zvykom. V systéme Windows je príslušný terminálový príkaz na inštaláciu:
py -3 -m pip install -U discord.pypythonKrok 2: vytvorte dokument Python
Vytvorte nový dokument Python, aby ste mohli naprogramovať svojho bota. Na svoj súbor Python môžete použiť rôzne editory kódu alebo integrované vývojové prostredie (IDE), ako je napríklad Pycharm.
Krok 3: pripojte sa k Discord
Najskôr importujte knižnicu Discord do svojho dokumentu Python. Nastavte token bota, ktorý ste dostali pri registrácii svojho bota Discord na vývojárskej stránke Discord. Na to nahraďte zástupný symbol svojím vlastným tokenom bota:
import discord
TOKEN = token_placeholderpythonNa interakciu s rozhraním Discord API potrebujete knižnicu. Na pripojenie k Discord potrebujete inštanciu takzvaného klientskeho objektu. Na jeho vytvorenie použite nasledujúci kód:
client = discord.Client()pythonKrok 4: Overte, či bolo pripojenie úspešne nadviazané.
Aby ste sa uistili, že je váš bot správne pripojený k serveru Discord, zahrňte do svojho súboru Python asynchrónnu metódu. To dosiahnete odpoveďou na udalosť on_ready, ktorá je definovaná v rozhraní API discord.py. Aby vaša funkcia mohla slúžiť ako obslužná udalosť, použite v Pythone dekorátor @client.event.
@client.event
async def on_ready():
print(f'{client.user} is connected to the following server:\n')
for server in client.guilds:
print(f'{server.name}(id: {server.id})')pythonAsynchrónne funkcie sa často používajú v programovaní botov Discord. Tým sa zaručuje, že funkcia beží na vyhradenom vlákne oddelenom od hlavného vlákna, čo umožňuje paralelné vykonávanie úloh botov bez blokovania hlavného vlákna.
Krok 5: pridajte funkcie do svojho bota
Na implementáciu funkcie bota v discord.py sa využíva udalosťon_message. Táto udalosť sa spustí vždy, keď váš Discord bot prijme správu. Na spracovanie tejto udalosti by vaša metóda mala najskôr určiť odosielateľa správy a potom vykonať požadovanú funkciu, napríklad pridanie rolí.
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!add_role'):
# Find role name
role_name = message.content.split(' ')[1]
# search corresponding Discord role
role = discord.utils.get(message.guild.roles, name=role_name)
# Check if the role exists
if role is None:
await message.channel.send(f'Role "{role_name}" does not exist)
return
# Role assignment
await message.author.add_roles(role)
await message.channel.send(f'Role "{role_name}" was added to {message.author}')Najskôr funkcia skontroluje, či prijatá správa bola odoslaná samotným botom Discord. Ak áno, funkcia sa ukončí pomocou príkazu return.
Ďalším krokom je podrobnejšie preskúmanie obsahu správy. Ak správa začína reťazcom !add_role, bot ju rozpozná ako príkaz. To znamená, že používatelia servera musia iniciovať požiadavky na Discord bot pomocou reťazca !add_role. Hoci ako príkaz možno použiť akýkoľvek reťazec, je lepšie používať reťazce, ktoré sa bežne nepoužívajú v prirodzenom jazyku.
Bot určí požadovaný názov role na základe správne interpretovaného príkazu pomocou funkcie Python split(). Následne vyhľadá príslušnú rolu na vašom serveri. Môžete to urobiť pomocou objektu message, ktorý obsahuje rôzne informácie o vašom serveri v poli message.guild.
Ak rola neexistuje a má hodnotu „None“, vygeneruje sa chybová správa a funkcia sa ukončí pomocou príkazu return. Ak rola existuje, priradí sa podľa potreby. Na tento účel používame funkciu add_roles z knižnice discord.py, ktorá je tiež definovaná v objekte message.