Oma Discordi serveri haldamine võib olla üsna töö­ma­hu­kas, mistõttu on hal­dus­üles­an­deid täitvad botid väga po­pu­laar­sed. Saad oma botti hõlpsasti luua, kasutades Python-raa­ma­tu­kogu discord.py ja ra­ken­da­des põhilisi Python-alaseid teadmisi.

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

Enne botti prog­ram­mee­ri­mise alus­ta­mist 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 üles­an­ne­test, mida soovid au­to­ma­ti­see­rida. Käes­ole­vas juhendis tut­vus­ta­tud botti eesmärk on lisada Discordi ser­ve­risse rolle.

1. samm: paigalda discord.py

Boti loomiseks on Pythoni raa­ma­tu­kogu discord.py hä­da­va­ja­lik vahend. Enne alus­ta­mist peate selle oma süsteemi pai­gal­dama pipi abil, nagu Pythoni puhul tavaks. Windowsis on pai­gal­da­miseks sobiv terminali käsk järgmine:

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

2. samm: loo Python-dokument

Loo uus Python-dokument oma botti prog­ram­mee­ri­miseks. Python-faili jaoks võid kasutada erinevaid koo­di­re­dak­to­reid või in­teg­ree­ri­tud aren­dus­kesk­konda (IDE), näiteks Pycharm.

3. samm: ühenda Discor­diga

Esmalt impordi Discordi teek oma Python-faili. Määra bo­ti­tun­nus , mille said Discordi botit re­gist­ree­ri­des Discordi aren­da­jate vee­bi­sai­dil. Selleks asenda pai­gu­tus­märk oma bo­ti­tun­nu­sega:

import discord
TOKEN = token_placeholder
python

Discordi API-ga suht­le­miseks on vaja seda raa­ma­tu­kogu. Discor­diga ühenduse loomiseks on vaja nn kliendi objekti instantsi. Selle loomiseks kasuta järgmist koodi:

client = discord.Client()
python

4. samm: Veendu, et ühendus loodi edukalt

Selleks et tagada, et teie bot oleks Discordi serveriga kor­ra­li­kult ühendatud, lisage oma Python-faili asünk­roonne meetod. Selleks tuleb rea­gee­rida sünd­mu­sele on_ready, mis on mää­rat­le­tud discord.py API-s. Et teie funkt­sioon saaks toimida sündmuse käit­le­jana, kasutage Pythonis de­ko­ra­to­rit @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
Note

Discordi botite prog­ram­mee­ri­misel ka­su­ta­takse sageli asünk­roon­seid funkt­sioone. See tagab, et funkt­sioon töötab pea­voo­lust eraldatud eraldi prot­ses­sis, või­mal­da­des botite üles­an­deid pa­ral­leel­selt täita ilma peavoolu blo­kee­ri­mata.

5. samm: lisa oma botile funkt­sioone

Bo­ti­funkt­sio­naal­suse ra­ken­da­miseks failis discord.py ka­su­ta­takse sündmuston_message. See sündmus käivitub iga kord, kui sinu Discordi bot saab sõnumi. Selle sündmuse tööt­le­miseks peaks sinu meetod esmalt kindlaks tegema sõnumi saatja ja seejärel täitma soovitud toimingu, näiteks rollide lisamise.

@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 kont­rol­lib funkt­sioon, kas saadud sõnumi on saatnud Discordi bot ise. Kui see on nii, lõ­pe­ta­takse funkt­sioon käsuga return.

Järgmine samm hõlmab sõnumi sisu põh­ja­li­ku­mat uurimist. Kui sõnum algab tä­he­mär­gi­ja­daga !add_role, tunnistab bot selle käskuna. See tähendab, et serveri kasutajad peavad Discordi botile päringud algatama tä­he­mär­gi­ja­daga !add_role. Kuigi käskuna võib kasutada mis tahes tä­he­mär­gi­jada, on soo­vi­ta­tav kasutada tä­he­mär­gi­ja­da­sid, mida loo­mu­li­kus keeles ta­va­li­selt ei kasutata.

Bot määrab õigesti tõl­gen­da­tud käsust soovitud rolli nime, kasutades selleks Python-funkt­siooni split(). Seejärel leiab ta teie serverist asjaomase rolli. Seda saab teha, kasutades objekti message, mis sisaldab väljal message.guild mit­me­su­gust teavet teie serveri kohta.

Kui rolli ei ole olemas ja selle väär­tu­seks on seetõttu „None“, kuvatakse veateade ning funkt­sioon lõ­pe­ta­takse käsuga return. Kui roll on olemas, mää­ra­takse see vastavalt va­ja­du­sele. Selleks kasutame raa­ma­tu­ko­gust discord.py pärit funkt­siooni add_roles, mis on samuti mää­rat­le­tud objektis message.

Go to Main Menu