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:
py -3 -m pip install -U discord.pypythonVaihe 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:
import discord
TOKEN = token_placeholderpythonTarvitset kirjaston, jotta voit käyttää Discord-sovellusliittymää. Yhteyden muodostamiseksi Discordiin tarvitset niin sanotun client-objektin instanssin. Luo se seuraavalla koodilla:
client = discord.Client()pythonVaihe 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.
@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})')pythonAsynkronisia 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.
@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.