# Kuidas luua Pythonis Discordi bot

Oma Discordi serveri haldamine võib olla üsna töömahukas, mistõttu on haldusülesandeid täitvad botid väga populaarsed. Saad oma botti hõlpsasti luua, kasutades Python-raamatukogu discord.py ja rakendades põhilisi Python-alaseid teadmisi.

## Samm-sammult omaenda Python-põhise Discordi botti loomine

Enne botti programmeerimise alustamist peaksid looma Discordi botti. Saad **Discordi kaudu luua oma rakenduse** ja kui see on tehtud, ei takista miski su Discordi botti tööd. Discordi botti jaoks vajalik kood sõltub ülesannetest, mida soovid automatiseerida. Käesolevas juhendis tutvustatud botti eesmärk on **lisada Discordi serverisse rolle**.

### 1. samm: paigalda discord.py

Boti loomiseks on Pythoni raamatukogu discord.py hädavajalik vahend. Enne alustamist peate selle oma süsteemi paigaldama pipi abil, nagu Pythoni puhul tavaks. Windowsis on paigaldamiseks sobiv terminali käsk järgmine:

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

### 2. samm: loo Python-dokument

Loo uus Python-dokument oma botti programmeerimiseks. Python-faili jaoks võid kasutada erinevaid koodiredaktoreid või **integreeritud arenduskeskkonda (IDE)**, näiteks Pycharm.

### 3. samm: ühenda Discordiga

Esmalt impordi Discordi teek oma Python-faili. Määra botitunnus **, mille** said **Discordi botit registreerides** Discordi arendajate veebisaidil. Selleks asenda paigutusmärk oma botitunnusega:

```python
import discord
TOKEN = token_placeholder
```

Discordi API-ga suhtlemiseks on vaja seda raamatukogu. Discordiga ühenduse loomiseks on vaja nn kliendi objekti instantsi. Selle loomiseks kasuta järgmist koodi:

```python
client = discord.Client()
```

### 4. samm: Veendu, et ühendus loodi edukalt

Selleks et tagada, et teie bot oleks Discordi serveriga korralikult ühendatud, lisage oma Python-faili asünkroonne meetod. Selleks tuleb reageerida sündmusele `on_ready`, mis on määratletud discord.py API-s. Et teie funktsioon saaks toimida sündmuse käitlejana, kasutage Pythonis dekoratorit `@client.event`.

```python
@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})')
```

Note Discordi botite programmeerimisel kasutatakse sageli asünkroonseid funktsioone. See tagab, et funktsioon töötab peavoolust eraldatud eraldi protsessis, võimaldades botite ülesandeid paralleelselt täita ilma peavoolu blokeerimata.

### 5. samm: lisa oma botile funktsioone

Botifunktsionaalsuse rakendamiseks failis discord.py kasutatakse **sündmust`on_message`**. See sündmus käivitub iga kord, kui sinu Discordi bot saab sõnumi. Selle sündmuse töötlemiseks peaks sinu meetod esmalt kindlaks tegema sõnumi saatja ja seejärel täitma soovitud toimingu, näiteks rollide lisamise.

```none
@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}')
```

Esmalt kontrollib funktsioon, kas saadud sõnumi on saatnud Discordi bot ise. Kui see on nii, lõpetatakse funktsioon käsuga `return`.

Järgmine samm hõlmab **sõnumi sisu põhjalikumat uurimist**. Kui sõnum algab tähemärgijadaga `!add_role`, tunnistab bot selle käskuna. See tähendab, et serveri kasutajad peavad Discordi botile päringud algatama tähemärgijadaga `!add_role`. Kuigi käskuna võib kasutada mis tahes tähemärgijada, on soovitatav kasutada tähemärgijadasid, mida **loomulikus keeles tavaliselt ei kasutata**.

Bot määrab õigesti tõlgendatud käsust soovitud rolli nime, kasutades selleks Python-funktsiooni split(). Seejärel leiab ta teie serverist asjaomase rolli. Seda saab teha, kasutades objekti `message`, mis sisaldab väljal `message.guild` mitmesugust teavet teie serveri kohta.

Kui rolli ei ole olemas ja selle väärtuseks on seetõttu „None“, kuvatakse veateade ning funktsioon lõpetatakse käsuga `return`. Kui roll on olemas, määratakse see vastavalt vajadusele. Selleks kasutame raamatukogust discord.py pärit funktsiooni `add_roles`, mis on samuti määratletud objektis `message`.

Note Teie Discordi bot suudab täita kõiki ülesandeid, mille talle määrate. Võite luua bote, mis täidavad sarnaseid funktsioone nagu tuntud vestlus- ja modereerimisbot MEE6, või isegi programmeerida omaenda Discordi muusikabote. Oleme seda illustreerinud lihtsa näite abil, mida algajatel on kerge järgida.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/server/oskusteave/pythoni-discord-bot/](https://www.ionos.com/et-ee/digitalguide/server/oskusteave/pythoni-discord-bot/) for AI/LLM consumption.