Avere un server Discord personale è molto im­pe­gna­ti­vo: per questo motivo i bot che si occupano delle funzioni am­mi­ni­stra­ti­ve sono così ap­prez­za­ti. Creare un bot del genere è facile grazie alla libreria Python discord.py e se si dispone di alcune nozioni di base su questo lin­guag­gio.

Procedura passo per passo per creare il tuo bot Discord in Python

Prima di iniziare a pro­gram­ma­re il tuo bot, devi creare un bot Discord. Per farlo, puoi creare un’ap­pli­ca­zio­ne personale su Discord. Da lì in poi, la strada per creare il tuo bot Discord è tutta in discesa. Il codice che ti servirà per il tuo bot dipende da quali attività desideri au­to­ma­tiz­za­re. Il bot descritto in questa guida ha la funzione di ag­giun­ge­re ruoli su un server Discord.

Primo passaggio: in­stal­la­re discord.py

Per creare il tuo bot, ti serve so­prat­tut­to la libreria Python discord.py, che devi quindi in­stal­la­re per prima cosa sul tuo sistema. Come al solito, in Python, per l’in­stal­la­zio­ne si utilizza pip. Su Windows, il comando da terminale ne­ces­sa­rio si presenta così:

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

Secondo passaggio: creare un documento Python

Crea un nuovo documento Python scrivendo il codice del tuo bot. Per il tuo file Python puoi uti­liz­za­re diversi editor di codice oppure un ambiente di sviluppo integrato (IDE), come ad esempio Pycharm.

Terzo passaggio: creare il col­le­ga­men­to con Discord

In­nan­zi­tut­to, importa la libreria Discord nel tuo documento Python e posiziona il token del bot che hai ottenuto durante la re­gi­stra­zio­ne del tuo bot Discord sulla pagina dedicata agli svi­lup­pa­to­ri di Discord. A tal fine devi so­sti­tui­re il se­gna­po­sto con il token del tuo bot personale:

import discord
TOKEN = token_placeholder
python

La libreria è ne­ces­sa­ria per in­te­ra­gi­re con l’API Discord. Per poterti collegare a Discord, è ne­ces­sa­ria anche un’istanza del co­sid­det­to oggetto client. Per crearla, utilizza il codice seguente:

client = discord.Client()
python

Quarto passaggio: con­trol­la­re che il col­le­ga­men­to sia stato creato cor­ret­ta­men­te

In questo passaggio devi integrare un metodo asincrono nel tuo documento Python per ve­ri­fi­ca­re che il col­le­ga­men­to del tuo bot con il server Discord funzioni senza problemi. Per farlo occorre reagire all’evento on_ready definito nell’API discord.py. Per per­met­te­re alla tua funzione di agire da gestore di eventi, utilizza il de­co­ra­to­re di funzione Python @client.event.

@client.event
async def on_ready():
    print(f'{client.user} è collegato con i server seguenti:\n')
    for server in client.guilds:
        print(f'{server.name}(id: {server.id})')
python
N.B.

Nella pro­gram­ma­zio­ne di bot Discord si uti­liz­za­no spesso le funzioni asincrone. Di con­se­guen­za, la funzione viene eseguita in un thread dedicato, di­sac­cop­pia­to dal thread prin­ci­pa­le. In questo modo, il thread prin­ci­pa­le non è bloccato e le attività del bot possono essere eseguite in parallelo.

Quinto passaggio: ag­giun­ge­re fun­zio­na­li­tà al tuo bot

L’API discord.py definisce un evento che ti permette di eseguire le fun­zio­na­li­tà del tuo bot, ossia l’evento on_message. Questo evento viene sempre attivato quando il tuo bot Discord riceve un messaggio. Un metodo che gestisce questo evento dovrebbe in­nan­zi­tut­to con­trol­la­re da quale mittente proviene il messaggio e, quindi, eseguire la fun­zio­na­li­tà de­si­de­ra­ta: nel nostro caso, l’aggiunta di ruoli.

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('!add_role'):
        # trova nome del ruolo
        role_name = message.content.split(' ')[1]
        # cerca il ruolo Discord corrispondente
        role = discord.utils.get(message.guild.roles, name=role_name)
        # controllo dell'esistenza del ruolo
        if role is None:
            await message.channel.send(f'Ruolo "{role_name}" non esiste)
            return
        # assegnazione del ruolo
        await message.author.add_roles(role)
        await message.channel.send(f'Ruolo "{role_name}" aggiunto a {message.author}')

Ini­zial­men­te, la funzione controlla se il messaggio ricevuto proviene dal bot Discord stesso. In questo caso, la funzione viene lasciata con l’istru­zio­ne return.

In un secondo passaggio si esamina più at­ten­ta­men­te il contenuto del messaggio. Se inizia con la serie di caratteri !add_role, il bot lo in­ter­pre­ta come comando. In pratica, gli utenti del server devono mettere la stringa !add_role all’inizio delle loro richieste al bot Discord. Ov­via­men­te puoi uti­liz­za­re una qualsiasi serie di caratteri a piacere come comando. Tuttavia, è con­si­glia­bi­le con­trol­la­re che la serie di caratteri non ricorra nell’uso del lin­guag­gio naturale.

Da un messaggio in­ter­pre­ta­to dal bot come comando corretto si ricava suc­ces­si­va­men­te il nome del ruolo de­si­de­ra­to per mezzo della funzione Python split(). Nel passaggio suc­ces­si­vo, viene cercato il ruolo cor­ri­spon­den­te sul tuo server. A tal fine puoi sfruttare l’oggetto message, che alla voce message.guild fornisce diverse in­for­ma­zio­ni sul tuo server.

Se il ruolo non esiste e, quindi, presenta il valore “None”, viene emesso un messaggio di errore e la funzione viene lasciata con l’istru­zio­ne return. In caso contrario, il ruolo viene assegnato di con­se­guen­za. A tal fine si utilizza la funzione add_roles della libreria discord.py; la funzione è definita sull’oggetto message.

N.B.

Ov­via­men­te il tuo bot Discord può svolgere diverse azioni. Ad esempio puoi creare bot che eseguono attività simili all’ap­prez­za­to bot per chat e mo­de­ra­zio­ne MEE6 oppure scrivere i tuoi personali bot musicali per Discord. Abbiamo scelto di de­scri­ve­re un esempio semplice e com­pren­si­bi­le anche per chi sta muovendo i primi passi.

Vai al menu prin­ci­pa­le