Vlastní server Discord může být velmi pracný, proto jsou populární boti, kteří se starají o administrativní funkce. Můžete si snadno navrhnout vlastního bota pomocí knihovny Python discord.py a základních znalostí jazyka Python.

Krok za krokem k vašemu vlastnímu Python Discord botovi

Než začnete programovat svého bota, měli byste si vytvořit Discord bota. Můžete si vytvořit vlastní aplikaci s Discordem a jakmile to uděláte, nic nebude stát v cestě vašemu Discord botovi. Kód, který potřebujete pro svého Discord bota, závisí na úkolech, které chcete automatizovat. Bot představený v tomto tutoriálu je určen k přidávání rolí v rámci Discord serveru.

Krok 1: nainstalujte discord.py

K vytvoření bota je nezbytným nástrojem knihovna Python discord.py. Než začnete, musíte ji nainstalovat do svého systému pomocí pip, jak je u Pythonu obvyklé. Ve Windows je příslušný příkaz pro instalaci:

py -3 -m pip install -U discord.py
python

Krok 2: vytvořte dokument Python

Vytvořte nový dokument Pythonu, abyste mohli naprogramovat svého bota. Pro soubor Pythonu můžete použít různé editory kódu nebo integrované vývojové prostředí (IDE), jako je například Pycharm.

Krok 3: připojte se k Discord

Nejprve importujte knihovnu Discord do svého dokumentu Python. Nastavte token bota, který jste obdrželi při registraci svého bota Discord na vývojářském webu Discord. Chcete-li to provést, nahraďte zástupný symbol svým vlastním tokenem bota:

import discord
TOKEN = token_placeholder
python

K interakci s rozhraním API Discord potřebujete knihovnu. Abyste se mohli připojit k Discord, budete potřebovat instanci tzv. klientského objektu. K jeho vytvoření použijte následující kód:

client = discord.Client()
python

Krok 4: Ověřte, zda bylo připojení úspěšně navázáno.

Aby byl váš bot správně připojen k serveru Discord, zahrňte do svého souboru Python asynchronní metodu. Toho dosáhnete reakcí na událost on_ready, která je definována v API discord.py. Aby vaše funkce mohla sloužit jako obslužná rutina události, použijte v Pythonu 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})')
python
Poznámka

Asynchronní funkce se často používají při programování botů pro Discord. Tím je zajištěno, že funkce běží na samostatném vlákně odděleném od hlavního vlákna, což umožňuje paralelní provádění úkolů botů bez blokování hlavního vlákna.

Krok 5: Přidejte do svého bota funkce

K implementaci funkcí bota v discord.py se využívá událoston_message. Tato událost se spustí vždy, když váš Discord bot přijme zprávu. K zpracování této události by vaše metoda měla nejprve určit odesílatele zprávy a poté provést požadovanou funkci, například přidání 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}')

Nejprve funkce zkontroluje, zda přijatá zpráva byla odeslána samotným botem Discord. Pokud ano, funkce je ukončena pomocí příkazu return.

Dalším krokem je podrobnější prozkoumání obsahu zprávy. Pokud zpráva začíná řetězcem !add_role, bot ji rozpozná jako příkaz. To znamená, že uživatelé serveru musí iniciovat požadavky na Discord bota pomocí řetězce !add_role. Ačkoli jako příkaz lze použít jakýkoli řetězec, je lepší používat řetězce, které se běžně nepoužívají v přirozeném jazyce.

Bot určí požadovaný název role na základě správně interpretovaného příkazu pomocí funkce Pythonu split(). Následně vyhledá příslušnou roli na vašem serveru. Toho lze dosáhnout pomocí objektu message, který obsahuje řadu informací o vašem serveru v poli message.guild.

Pokud role neexistuje a má tedy hodnotu „None“, vygeneruje se chybová zpráva a funkce se ukončí pomocí příkazu return. Pokud role existuje, přiřadí se podle potřeby. K tomu využíváme funkci add_roles z knihovny discord.py, která je také definována v objektu message.

Přejít do hlavního menu