# Bot Discord in Python: come creare il tuo bot personalizzato

Avere un server Discord personale è molto impegnativo: per questo motivo i bot che si occupano delle funzioni amministrative sono così apprezzati. Creare un [bot](https://www.ionos.it/digitalguide/online-marketing/vendere-online/che-cose-un-bot/) del genere è facile grazie alla libreria Python discord.py e se si dispone di alcune nozioni di base su questo linguaggio.

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

Prima di iniziare a programmare il tuo bot, devi [creare un bot Discord](https://www.ionos.it/digitalguide/server/know-how/creare-un-bot-su-discord/). Per farlo, puoi **creare un’applicazione 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 automatizzare. Il bot descritto in questa guida ha la funzione di **aggiungere ruoli su un server Discord**.

### Primo passaggio: installare discord.py

Per creare il tuo bot, ti serve soprattutto la **libreria Python discord.py**, che devi quindi installare per prima cosa sul tuo sistema. Come al solito, in Python, per l’installazione si utilizza pip. Su Windows, il comando da terminale necessario si presenta così:

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

### Secondo passaggio: creare un documento Python

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

### Terzo passaggio: creare il collegamento con Discord

Innanzitutto, importa la libreria Discord nel tuo documento Python e posiziona il token del bot che hai ottenuto **durante la registrazione del tuo bot Discord** sulla pagina dedicata agli sviluppatori di Discord. A tal fine devi sostituire il segnaposto con il token del tuo bot personale:

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

La libreria è necessaria per interagire con l’API Discord. Per poterti collegare a Discord, è necessaria anche un’istanza del cosiddetto oggetto client. Per crearla, utilizza il codice seguente:

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

### Quarto passaggio: controllare che il collegamento sia stato creato correttamente

In questo passaggio devi integrare un **metodo asincrono** nel tuo documento Python per verificare che il collegamento del tuo bot con il server Discord funzioni senza problemi. Per farlo occorre reagire all’evento `on_ready` definito nell’API discord.py. Per permettere alla tua funzione di agire da gestore di eventi, utilizza il decoratore di funzione Python `@client.event`.

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

N.B. Nella programmazione di bot Discord si utilizzano spesso le funzioni asincrone. Di conseguenza, la funzione viene eseguita in un thread dedicato, disaccoppiato dal thread principale. In questo modo, il thread principale non è bloccato e le attività del bot possono essere eseguite in parallelo.

### Quinto passaggio: aggiungere funzionalità al tuo bot

L’API discord.py definisce un evento che ti permette di eseguire le funzionalità 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 innanzitutto controllare da quale mittente proviene il messaggio e, quindi, eseguire la funzionalità desiderata: nel nostro caso, l’aggiunta di ruoli.

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

Inizialmente, la funzione controlla se il messaggio ricevuto proviene dal bot Discord stesso. In questo caso, la funzione viene lasciata con l’istruzione `return`.

In un secondo passaggio si **esamina più attentamente il contenuto del messaggio**. Se inizia con la serie di caratteri `!add_role`, il bot lo interpreta come comando. In pratica, gli utenti del server devono mettere la stringa `!add_role` all’inizio delle loro richieste al bot Discord. Ovviamente puoi utilizzare una qualsiasi serie di caratteri a piacere come comando. Tuttavia, è consigliabile controllare che la serie di caratteri **non ricorra nell’uso del linguaggio naturale**.

Da un messaggio interpretato dal bot come comando corretto si ricava successivamente il nome del ruolo desiderato per mezzo della [funzione Python `split()`](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/split-in-python/). Nel passaggio successivo, viene cercato il ruolo corrispondente sul tuo server. A tal fine puoi sfruttare l’oggetto `message`, che alla voce `message.guild` fornisce diverse informazioni 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’istruzione `return`. In caso contrario, il ruolo viene assegnato di conseguenza. A tal fine si utilizza la funzione `add_roles` della libreria discord.py; la funzione è definita sull’oggetto `message`.

N.B. Ovviamente il tuo bot Discord può svolgere diverse azioni. Ad esempio puoi creare bot che eseguono attività simili all’apprezzato bot per chat e moderazione [MEE6](https://www.ionos.it/digitalguide/online-marketing/social-media/bot-mee6/) oppure scrivere i tuoi personali [bot musicali per Discord](https://www.ionos.it/digitalguide/server/know-how/discord-music-bot/). Abbiamo scelto di descrivere un esempio semplice e comprensibile anche per chi sta muovendo i primi passi.


This is a markdown version of: [https://www.ionos.it/digitalguide/server/know-how/bot-discord-in-python/](https://www.ionos.it/digitalguide/server/know-how/bot-discord-in-python/) for AI/LLM consumption.