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:
py -3 -m pip install -U discord.pypython2. 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:
import discord
TOKEN = token_placeholderpythonDiscordi API-ga suhtlemiseks on vaja seda raamatukogu. Discordiga ühenduse loomiseks on vaja nn kliendi objekti instantsi. Selle loomiseks kasuta järgmist koodi:
client = discord.Client()python4. 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.
@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})')pythonDiscordi 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ündmuston_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.
@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.