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
GenereBot (non in lista)
Ultima versione1.7.2
Sistema operativoMicrosoft Windows
LinguaggioPython
Licenzalicenza MIT
(licenza libera)
LinguaInglese
Sito webAPI

Versioni

La prima versione è chiamata V0.10.0[2] ed è stata rilasciata nel 2018[senza fonte], disponibile da Python 3.5.3[3] in poi.

Il passaggio alla versione 1.0 è definito così:

"one of the biggest breaking changes in the library due to a complete redesign"

La versione più recente è la 1.7.2[2], disponibile dalla versione di Python 3.9.1 in poi.

Utilizzo

Con l'importazione del modulo all'interno di un programma, è possibile dare vita a un Bot il quale, attraverso le funzioni e le variabili della libreria, potrà comportarsi su Discord esattamente come un utente umano.

Funzioni

Il Bot potrà quindi eseguire, come un normale utente, le seguenti operazioni:

  • Leggere i messaggi
  • Inviare messaggi
  • Allegare file[4]
  • Scrivere in privato agli utenti

Non potrà naturalmente leggere i messaggi di canali[5] che per questioni di autorizzazione[6] non possa vedere.

Allo stesso modo per mancanza di autorizzazione da parte del proprietario[7] del server (che i programmatori usano chiamare Guild[8]) potrebbe subire limitazioni nei permessi per:

  • Scrivere in privato agli utenti
  • Menzionare gli utenti
  • Espellere gli utenti[9]
  • Bannare gli utenti[10]
  • Modificare il nickname degli altri utenti

Le autorizzazioni dei singoli Bot sono gestite da Discord Developer Portal, che genera link di invito al server per i Bot a seconda dei permessi che il ruolo personalizzato richiede.

In caso di mancata autorizzazione, il compilatore restituirà l'errore seguente:

discord.ext.command.errors.MissingPermission

Un Bot avente tutte le autorizzazioni all'interno di un server, può accedere a gran parte del pacchetto dati degli utenti a lui visibili, che include:

  • Il tuo indirizzo IP
  • Account che hai connesso a Discord (Twitch, Twitter, Steam, spotify)
  • Il tuo numero discriminatore[11]
  • Una lista di qualsiasi sessione attiva tu abbia: PC, cellulare, browser (incluso indirizzo IP)
  • La lista dei tuoi amici
  • La lista degli utenti bloccati
  • Informazioni sui pagamenti (se sei iscritto a Nitro[12])
  • Informazioni sviluppatore[13] (per webhooks, Bot)
  • La lista degli utenti. (Dall'aggiornamento alla versione 1.7 ha causato problemi[14], in quanto necessita di abilitare da Discord Developer Portal[15] una funzione privilegiata[16])

Applicazioni

A partire dalle funzioni di base, utilizzando altri moduli tra i quali asyncio.py e time.py[17], si possono creare applicazioni utili, tra le quali:

  • Ban/Kick a tempo determinato
async def ban_temporaneo(member, tempo):
    await member.ban()
    await asyncio.sleep(tempo)
    await member.unban()
  • Stato del Bot a tempo determinato
async def Cambia_stato(ctx, tempo, nuovo_stato):
    nuovo_stato = discord.Game(str(nuovo_stato))
    await Bot.change_presence(status = discord.Status.idle, activity = nuovo_stato)
    tempo = float(tempo)
    from asyncio import sleep
    await sleep(tempo) 
    await Bot.change_presence(status = discord.Status.idle, activity = gioco)

Esempi di codice

Il codice seguente è lo stretto necessario per un programma che semplicemente porti il Bot online.

import discord #L'alternativa è di importare  discord.client, discord.ban, discord.kick, discord.events e così via
import discord.ext.commands.errors
from discord.ext import commands
from discord import client

token = "<inserisci-qui-il-token-del-bot>" #I token dei Bot vengono presi da Discord Developer Portal, e vengono immediatamente rinnovati se trovati online dal sistema di Discord
Bot = commands.Bot(command_prefix = "£", description = "<inserisci-qui-la-descrizione-del-bot>")
gioco = discord.Game("£Aiuto | Bot | @Bot#1127")

Bot.run(token)

Il codice di cui sotto contiene un piccolo evento aggiunto, che stampa a schermata Bot#1127 è ora online ID: 12345678

@Bot.event
async def on_ready():
    print(Bot.user, " è ora online ", "ID: ", Bot.user.id)
    await Bot.change_presence(status = discord.Status.idle, activity = gioco)

Collegamenti esterni

Note

  1. ^ Discord.py, su awesomeopensource.com. URL consultato l'11 Maggio 2021.
  2. ^ a b Versioni di Discord.py, su discordpy.readthedocs.io.
  3. ^ Compatibilità della versione 1.0, su discordpy.readthedocs.io.
  4. ^ Che devono però essere presenti nella stessa cartella del programma, e che vanno quindi consegnati nel caso ci si avvalga di un servizio di hosting.
  5. ^ Si veda Discord, alla definizione di canale, sottodivisione del "server".
  6. ^ Si veda Discord, nella sezione riguardante la gerarchia dei ruoli, e i vari permessi.
  7. ^ Dalla stessa libreria Discord.py definito (discord.guild.)owner.user
  8. ^ Server vs Guild, su GitHub, 15 Agosto 2016. URL consultato l'11 Maggio 2021.
  9. ^ Esiste il comando apposito member.kick()
  10. ^ Esiste il comando apposito member.ban()
  11. ^ Quattro cifre, separate dal nome utente da un'hashtag, che anche i Bot a loro volta hanno.
  12. ^ Servizio a pagamento, abbonamento "premium" di Discord
  13. ^ Discord Developer Portal associa ogni Bot all'utente che l'ha creato.
  14. ^ discord.py - discord py, ctx.guild.members, only returns bot, su Stack Overflow. URL consultato l'11 maggio 2021.
  15. ^ discord.guild.members, su Python.tutoriallink.com.
  16. ^ discord.Intents, su https://discordpy.readthedocs.io/. URL consultato l'11 Maggio 2021.
  17. ^ L'equivalente di <locale> (lettura "local-e") in C++, importa una serie di variabili a seconda del luogo nel quale ci si trova, tra le quali il fuso orario e i caratteri UTF-8 della lingua locale.