Discord.py è una libreria open source[1] per il linguaggio di programmazione Python, che permette di sviluppare Bot per il social media Discord.

discord.py
software
GenereLibreria di Python
SviluppatoreRapptz
Ultima versione2.3.2
Sistema operativoMultipiattaforma
LinguaggioPython
LicenzaMIT
(licenza libera)
Linguainglese
Sito webdiscordpy.rtfd.org/en/latest

Storia modifica

La libreria discord.py è stata sviluppata da Rapptz come modulo Python per sviluppare Bot per la piattaforma VoIP Discord.

La prima versione della libreria è stata rilasciata il 23 agosto 2015[2], compatibile con versioni di Python 2.7+ e 3.3+. La versione 0.10.0 è stata rilasciata il 28 giugno 2016[3] è stata la prima versione totalmente compatibile col modulo asyncio, che permette di scrivere codice Python usando la sintassi async/await[4].

Il 9 aprile 2019 è stata rilasciata la versione v1.0.0[5], frutto di una completa ristrutturazione[6] e con molteplici cambiamenti non retrocompatibili; inoltre, è stato abbandonato il supporto per Python 3.4 e precedenti.

I creatori hanno annunciato la fine dello sviluppo della libreria[7] a fine Agosto 2021[7], per poi riprendere lo sviluppo[8] nei primi giorni di Marzo 2022.

Il 18 agosto 2022 è stata rilasciata la version v2.0.0[9], che portò molti cambiamenti non retrocompatibili[10], i più notevoli sono una completa revisione di molte componenti async[11], e la rimozione del supporto per gli account utente[12], consentendo fare login solo con gli account bot, in conformità con le modifiche ai termini di servizio di Discord[13]; inoltre, è stato abbandonato il supporto per Python 3.7 e precedenti.

La versione più recente è la 2.3.2[14].

Utilizzo modifica

Dopo aver importato il modulo discord.py in un programma, è possibile utilizzare i suoi metodi per creare il codice di un Bot, il quale a tutti gli effetti può agire su Discord come un utente umano, ma avendo anche certe funzioni extra come i comandi applicazzione[15] e le componenti di messaggio[16].

Funzioni modifica

Il Bot può eseguire, così come un normale utente, le seguenti operazioni:

  • leggere e inviare messaggi
  • allegare file ad essi messaggi
  • scrivere in privato agli utenti
  • bannare, espellere e moderare gli utenti
  • eliminare messaggi e canali
  • creare guilds[17]
  • collegarsi a canali vocali e riprodurre audio

Non può naturalmente leggere i messaggi di canali[18] che per questioni di autorizzazione[19] non possa vedere. Non può neanche leggere il contenuto dei messaggi se gli appositi intenti non sono attivati[20].

Allo stesso modo, per mancanza di autorizzazione da parte del proprietario[21] o dagli amministratori del guild, il bot potrebbe subire limitazioni nei permessi per eseguire diverse azioni, esse elencate nella documentazione dei permessi.

Le autorizzazioni dei singoli Bot sono gestite da Discord Developer Portal, che genera link di invito al guild per i Bot a seconda dei permessi selezionati. In caso di mancata autorizzazione, l'interprete restituisce un errore. I permessi per ogni particolare guild possono essere sempre modificati dagli amministratori del guild.

Esempi di codice modifica

Questo codice crea un semplice bot che quando si esegue il comando '!ciao', lui risponde.

Per fare bot più complessi, è suggerito usare la libreria discord.ext.commands[22], compresa in ogni istallazione di discord.py. Esempi più avanzati si possono trovare sul sito GitHub della libreria.

# Questo esempio necessita avere l'intento 'message_content' abilitato.

import discord


class MyClient(discord.Client):
    async def on_ready(self):
        """Funzione chiamata dalla libreria quando il cache
        interno del cliente è completamente popolato."""
    
        print(f'Autenticato come {self.user} (ID: {self.user.id})')
        print(f'Sono in {len(self.guilds)} server, e vedo {len(bot.users)} utenti.')
        print('------')

    async def on_message(self, message):
        """Evento chiamato quando il cliente riceve un messaggio."""

        # non vogliamo che il bot risponda a se stesso.
        if message.author == self.user:
            return

        # Se il messaggio inizia con '!ciao', noi rispondiamo.
        if message.content.startswith('!ciao'):
            await message.reply('Ciao da Wikipedia!', mention_author=True)


# Intenti di base, più l'intento necessario per leggere il contenuto dei messaggi.
intents = discord.Intents.default()
intents.message_content = True

# Attività: messaggio mostrato sotto il nome del bot.
activity = discord.CustomActivity(name="Ciao da Wikipedia!")

client = MyClient(intents=intents, activity=activity)
client.run('token del bot')

Questo esempio è una copia modificata e tradotta dell'esempio ufficiale reply.py

Note modifica

  1. ^ (EN) Discord.py, su awesomeopensource.com. URL consultato l'11 Maggio 2021.
  2. ^ (EN) Release v0.1.0 · Rapptz/discord.py, su GitHub. URL consultato il 12 maggio 2021.
  3. ^ (EN) Release v0.10.0 · Rapptz/discord.py, su GitHub. URL consultato il 12 maggio 2021.
  4. ^ (EN) asyncio — Asynchronous I/O — Python 3.9.5 documentation, su docs.python.org. URL consultato il 12 maggio 2021.
  5. ^ (EN) Release v1.0.0 · Rapptz/discord.py, su GitHub. URL consultato il 12 maggio 2021.
  6. ^ (EN) Migrating to v1.0, su discordpy.readthedocs.io. URL consultato il 12 maggio 2021.
  7. ^ a b (EN) Rapptz, The future of Discord.py, su Github, 28 Agosto 2021. URL consultato il 21 Ottobre 2021.
  8. ^ (EN) Rapptz, On Resuming discord.py Development, su GitHub Gists. URL consultato il 26 marzo 2022.
  9. ^ (EN) Release v2.0.0 · Rapptz/discord.py, su GitHub. URL consultato il 26 ottobre 2023.
  10. ^ (EN) Changelog — v2.0.0, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.
  11. ^ asyncio Event Loop Changes, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.
  12. ^ Removal of Support For User Accounts, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.
  13. ^ (EN) Automated user accounts (self-bots), su support.discord.com.
  14. ^ (EN) Versioni di Discord.py, su discordpy.readthedocs.io.
  15. ^ (EN) Application Commands, su Discord Developer Portal. URL consultato il 26 ottobre 2023.
  16. ^ (EN) Message Components, su Discord Developer Portal. URL consultato il 26 ottobre 2023.
  17. ^ Funzione disponibile solo se il bot è in meno di 10 guild.
  18. ^ Si veda Discord, alla definizione di canale, sottodivisione del "server".
  19. ^ Si veda Discord, nella sezione riguardante la gerarchia dei ruoli, e i vari permessi.
  20. ^ (EN) A Primer to Gateway Intents, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.
  21. ^ (EN) discord.Guild.owner — API Reference, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.
  22. ^ (EN) discord.ext.commands – Bot commands framework, su discordpy.readthedocs.io. URL consultato il 26 ottobre 2023.

Collegamenti esterni modifica