# Kuinka luoda Python-pohjainen Discord-botti

Oman Discord-palvelimen ylläpito voi vaatia paljon työtä, minkä vuoksi hallinnollisista tehtävistä huolehtivat botit ovat suosittuja. Voit helposti suunnitella oman botin käyttämällä Python-kirjastoa discord.py ja soveltamalla perustietoja Pythonista.

## Askel askeleelta kohti omaa Python-Discord-bottia

Ennen kuin aloitat botin ohjelmoinnin, sinun tulee luoda Discord-botti. Voit **luoda oman sovelluksen Discordissa**, ja kun olet tehnyt sen, mikään ei enää estä Discord-bottisi käyttöä. Discord-bottiin tarvittava koodi riippuu tehtävistä, jotka haluat automatisoida. Tässä oppaassa esitelty botti on tarkoitettu **roolien lisäämiseen Discord-palvelimella**.

### Vaihe 1: asenna discord.py

Botin luomiseen tarvitset ehdottomasti Python-kirjaston discord.py. Ennen kuin aloitat, sinun on asennettava se järjestelmääsi pip-komennolla, kuten Pythonissa on tapana. Windowsissa asennukseen käytettävä komentorivikomento on:

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

### Vaihe 2: Luo Python-tiedosto

Luo uusi Python-tiedosto botin koodaamista varten. Voit käyttää Python-tiedoston luomiseen erilaisia koodieditoreita tai **integroitua kehitysympäristöä (IDE)**, kuten Pycharmia.

### Vaihe 3: Yhdistä Discordiin

Aloita tuomalla Discord-kirjasto Python-tiedostoosi. Määritä botin tunnus, jonka sait **rekisteröidessäsi Discord-botin** Discordin kehittäjäsivustolla. Korvaa tätä varten paikkamerkki omalla botin tunnuksellasi:

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

Tarvitset kirjaston, jotta voit käyttää Discord-sovellusliittymää. Yhteyden muodostamiseksi Discordiin tarvitset niin sanotun client-objektin instanssin. Luo se seuraavalla koodilla:

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

### Vaihe 4: Varmista, että yhteys on muodostettu onnistuneesti

Varmistaaksesi, että botti on kytketty oikein Discord-palvelimeen, lisää Python-tiedostoon asynkroninen menetelmä. Tämä toteutetaan reagoimalla `on_ready`, joka on määritelty discord.py-sovellusliittymässä. Jotta funktiosta tulisi tapahtumankäsittelijä, käytä Pythonissa `@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})')
```

Huomio Asynkronisia funktioita käytetään usein Discord-bottien ohjelmoinnissa. Näin varmistetaan, että funktio suoritetaan pääsäikeestä erillisellä omalla säikeellä, mikä mahdollistaa bottitehtävien rinnakkaisen suorittamisen estämättä pääsäikeen toimintaa.

### Vaihe 5: Lisää toimintoja bottiisi

Bot-toimintojen toteuttamiseksi discord.py-kirjastossa käytetään **`on_message`**. Tämä tapahtuma laukeaa aina, kun Discord-botisi vastaanottaa viestin. Tapahtuman käsittelemiseksi metodisi tulisi ensin tunnistaa viestin lähettäjä ja suorittaa sitten haluttu toiminto, kuten roolien lisääminen.

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

Aluksi funktio tarkistaa, onko vastaanotettu viesti lähetetty Discord-botin itsensä toimesta. Jos näin on, funktio lopetetaan `return`.

Seuraavassa vaiheessa **viestin sisältöä tarkastellaan tarkemmin**. Jos viesti alkaa merkkijonolla `!add_role`, botti tunnistaa sen komennoksi. Tämä tarkoittaa, että palvelimen käyttäjien on aloitettava Discord-botille osoitetut pyynnöt merkkijonolla `!add_role`. Vaikka komennoksi voidaan käyttää mitä tahansa merkkijonoa, on suositeltavaa käyttää merkkijonoja, joita **ei yleisesti käytetä luonnollisessa kielessä.**

Botti määrittää halutun roolin nimen oikein tulkitsemansa komennon perusteella Python-funktiota split() käyttäen. Sen jälkeen se etsii kyseisen roolin palvelimeltasi. Tämä tapahtuu hyödyntämällä `message`, jonka `message.guild` on monenlaista tietoa palvelimestasi.

Jos roolia ei ole olemassa ja sen arvoksi tulee siten ”None”, järjestelmä tuottaa virheilmoituksen ja lopettaa toiminnon `return`. Jos rooli on olemassa, se määritetään tarpeen mukaan. Tätä varten käytämme discord.py-kirjaston `add_roles`, joka on määritelty myös `message`.

Huomio Discord-botillasi on kyky suorittaa kaikki tehtävät, jotka sille määrität. Voit suunnitella botteja, jotka suorittavat toimintoja, jotka muistuttavat tunnettua chat- ja moderointibottia MEE6:ta, tai jopa koodata omia Discord-musiikkibottejasi. Olemme havainnollistaneet tätä yksinkertaisella esimerkillä, jota aloittelijat voivat helposti seurata.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/palvelin/osaaminen/python-discord-botti/](https://www.ionos.com/fi-fi/digitalguide/palvelin/osaaminen/python-discord-botti/) for AI/LLM consumption.