Discord.py: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Modificato il linguaggio di programmazione. Sul sito di React Native (framework di javascript per la creazione di app per mobile) risulta che discrod sia stata creata utilizzando questo framework. Lascio il link affinché possiate verificare, scorrete la pagina e troverete discord. https://reactnative.dev/showcase
Etichette: Annullato Modifica da mobile Modifica da web per mobile
FrescoBot (discussione | contributi)
m Bot: errori di battitura
 
(8 versioni intermedie di 6 utenti non mostrate)
Riga 1:
'''Discord.py''' è una [[Libreria (software)|libreria]] [[open source]]<ref>{{Cita web|url=https://awesomeopensource.com/projects/discord-py|titolo=Discord.py|sito=awesomeopensource.com|lingua=EN|accesso=11 Maggio 2021}}</ref> per il linguaggio di programmazione [[Python]], che permette di sviluppare [[Bot (informatica)|Bot]] per il [[social media]] [[Discord (software)|Discord]].
{{Software
|Nome = discord.py
|Sviluppatore = Rapptz
|UltimaVersione = 12.74.30
|SistemaOperativo = multipiattaforma
|Linguaggio = JavascriptPython
|Genere = python
|Licenza = [[Licenza MIT|MIT]]
Riga 16:
La libreria discord.py è stata sviluppata da Rapptz come modulo Python per sviluppare Bot per la piattaforma [[VoIP]] [[Discord (software)|Discord]].
 
La prima versione della libreria è stata rilasciata il 23 agosto 2015<ref>{{Cita web|url=https://github.com/Rapptz/discord.py/releases/tag/v0.1.0|titolo=Release v0.1.0 · Rapptz/discord.py|sito=GitHub|lingua=en|accesso=2021-05-12}}</ref>, compatibile con versioni di Python 2.7+ e 3.3+. La versione 0.10.0 è stata rilasciata il 28 giugno 2016<ref>{{Cita web|url=https://github.com/Rapptz/discord.py/releases/tag/v0.10.0|titolo=Release v0.10.0 · Rapptz/discord.py|sito=GitHub|lingua=en|accesso=2021-05-12}}</ref> è stata la prima versione totalmente compatibile col modulo ''asyncio'', che permette di scrivere codice Python usando la [[sintassi]] async/await<ref>{{Cita web|url=https://docs.python.org/3/library/asyncio.html|titolo=asyncio — Asynchronous I/O — Python 3.9.5 documentation|sito=docs.python.org|lingua=EN|accesso=2021-05-12}}</ref>.
 
Il 9 aprile 2019 è stata rilasciata la versione v1.0.0<ref>{{Cita web|url=https://github.com/Rapptz/discord.py/releases/tag/v1.0.0|titolo=Release v1.0.0 · Rapptz/discord.py|sito=GitHub|lingua=en|accesso=2021-05-12}}</ref>, frutto di una completa ristrutturazione<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/migrating.html#migrating-1-0|titolo=Migrating to v1.0|sito=discordpy.readthedocs.io|lingua=EN|accesso=2021-05-12}}</ref> 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<ref name=":1">{{Cita web|url=https://gist.github.com/Rapptz/4a2f62751b9600a31a0d3c78100287f1|titolo=The future of Discord.py|autore=Rapptz|sito=Github|data=28 Agosto 2021|lingua=EN|accesso=21 Ottobre 2021}}</ref> a fine Agosto 2021<ref>{{Cita web|urlname=https"://gist.github.com/Rapptz/4a2f62751b9600a31a0d3c78100287f1|titolo=Danny,1" creator of discord.py, is halting development of the library. Discord.py has come to an end - will likely have a major effect on bots|sito=Reddit|data=28 Agosto 2021|accesso=21 Ottobre 2021}}</ref>, per poi riprendere lo sviluppo<ref>{{Cita web|url=https://gist.github.com/Rapptz/c4324f17a80c94776832430007ad40e6|titolo=dpy_development_plansOn Resuming discord.mdpy Development|autore=262588213843476Rapptz|sito=GistGitHub Gists|lingua=en|accesso=2022-03-26}}</ref> nei primi giorni di Marzo 2022.
La versione più recente è la 1.7.3<ref name=":0">{{Cita web|url=https://discordpy.readthedocs.io/en/stable/whats_new.html?highlight=latest%20version|titolo=Versioni di Discord.py|sito=discordpy.readthedocs.io}}</ref>.
 
Il 18 agosto 2022 è stata rilasciata la version v2.0.0<ref>{{Cita web|url=https://github.com/Rapptz/discord.py/releases/tag/v2.0.0|titolo=Release v2.0.0 · Rapptz/discord.py|sito=GitHub|lingua=en|accesso=2023-10-26}}</ref>, che portò molti cambiamenti non retrocompatibili<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/whats_new.html#v2-0-0|titolo=Changelog — v2.0.0|sito=discordpy.readthedocs.io|lingua=EN|accesso=2023-10-26}}</ref>, i più notevoli sono una completa revisione di molte componenti async<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/migrating.html#asyncio-event-loop-changes|titolo=asyncio Event Loop Changes|sito=discordpy.readthedocs.io|accesso=2023-10-26}}</ref>, e la rimozione del supporto per gli account utente<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/migrating.html#removal-of-support-for-user-accounts|titolo=Removal of Support For User Accounts|sito=discordpy.readthedocs.io|accesso=2023-10-26}}</ref>, consentendo fare [[login]] solo con gli account bot, in conformità con le modifiche ai termini di servizio di Discord<ref>{{Cita web|url=https://support.discord.com/hc/en-us/articles/115002192352-Automated-user-accounts-self-bots|titolo=Automated user accounts (self-bots)|lingua=EN}}</ref>; inoltre, è stato abbandonato il supporto per Python 3.7 e precedenti.
I creatori hanno annunciato la fine dello sviluppo della libreria<ref>{{Cita web|url=https://gist.github.com/Rapptz/4a2f62751b9600a31a0d3c78100287f1|titolo=The future of Discord.py|autore=Rapptz|sito=Github|data=28 Agosto 2021|accesso=21 Ottobre 2021}}</ref> a fine Agosto 2021<ref>{{Cita web|url=https://gist.github.com/Rapptz/4a2f62751b9600a31a0d3c78100287f1|titolo=Danny, creator of discord.py, is halting development of the library. Discord.py has come to an end - will likely have a major effect on bots|sito=Reddit|data=28 Agosto 2021|accesso=21 Ottobre 2021}}</ref>, per poi riprendere lo sviluppo<ref>{{Cita web|url=https://gist.github.com/Rapptz/c4324f17a80c94776832430007ad40e6|titolo=dpy_development_plans.md|autore=262588213843476|sito=Gist|lingua=en|accesso=2022-03-26}}</ref> nei primi giorni di Marzo 2022.
 
La versione più recente è la 12.74.30<ref name=":0">{{Cita web|url=https://discordpy.readthedocs.io/en/stable/whats_new.html?highlight=latest%20version|titolo=Versioni di Discord.py|sito=discordpy.readthedocs.io|lingua=EN}}</ref>.
 
== Utilizzo ==
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 esattamente come un utente umano, ma avendo anche certe funzioni extra come i comandi applicazione<ref>{{Cita web|url=https://discord.com/developers/docs/interactions/application-commands|titolo=Application Commands|sito=Discord Developer Portal|lingua=EN|accesso=2023-10-26}}</ref> e le componenti di messaggio<ref>{{Cita web|url=https://discord.com/developers/docs/interactions/message-components|titolo=Message Components|sito=Discord Developer Portal|lingua=EN|accesso=2023-10-26}}</ref>.
 
=== Funzioni ===
Il Bot può eseguire, così come un normale utente, le seguenti operazioni:
 
* leggere ie inviare messaggi
* inviareallegare file ad essi messaggi
* allegare file<ref>Che devono però essere presenti nella stessa cartella del programma, e che vanno quindi consegnati nel caso ci si avvalga di un [[Hosting|servizio di hosting]].</ref>
* scrivere in privato agli utenti
* bannare, espellere e moderare gli utenti
* eliminare messaggi e canali
* creare guilds<ref>Funzione disponibile solo se il bot è in meno di 10 guild.</ref>
* collegarsi a canali vocali e riprodurre audio
 
Non può naturalmente leggere i messaggi di canali<ref>Si veda [[Discord]], alla definizione di canale, sottodivisione del "server".</ref> che per questioni di autorizzazione<ref>Si veda [[Discord]], nella sezione riguardante la gerarchia dei ruoli, e i vari permessi.</ref> non possa vedere. Non può neanche leggere il contenuto dei messaggi se gli appositi intenti non sono attivati<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/intents.html#message-content|titolo=A Primer to Gateway Intents|sito=discordpy.readthedocs.io|lingua=EN|accesso=2023-10-26}}</ref>.
 
Allo stesso modo, per mancanza di autorizzazione da parte del proprietario<ref>Dalla stessa libreria '''Discord.py''' definito ''(discord.guild.)owner.user''</ref> del server (che i programmatori usano chiamare Guild<ref>{{Cita web|url=https://githubdiscordpy.comreadthedocs.io/Rapptzen/stable/api.html#discord.py/issues/302Guild.owner|titolo=Serverdiscord.Guild.owner vs GuildAPI Reference|sito=GitHubdiscordpy.readthedocs.io|datalingua=15 Agosto 2016EN|accesso=11 Maggio 20212023-10-26}}</ref>) o dagli amministratori del guild, il bot potrebbe subire limitazioni nei permessi per eseguire diverse azioni, esse elencate nella [https://discordpy.readthedocs.io/en/stable/api.html#discord.Permissions documentazione dei permessi].
 
Le autorizzazioni dei singoli Bot sono gestite da [[discord:developers/applications|Discord Developer Portal]], che genera link di invito al serverguild per i Bot a seconda dei permessi che il ruolo personalizzato richiedeselezionati. In caso di mancata autorizzazione, il l'[[compilatoreInterprete (informatica)|interprete]] restituisce un errore. I permessi per ogni particolare guild possono essere sempre modificati dagli amministratori del guild.
* scrivere in privato agli utenti
* menzionare gli utenti
* espellere gli utenti<ref>Esiste il comando apposito member.kick()</ref>
* bannare gli utenti<ref>Esiste il comando apposito member.ban()</ref>
* modificare il [[nickname]] degli altri utenti
 
=== Esempi di codice ===
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]] restituisce un errore.
 
Questo codice crea un semplice bot che quando si esegue il comando '!ciao', lui risponde.
Un Bot avente tutte le autorizzazioni all'interno di un server, può accedere a gran parte del pacchetto dati<ref>{{Cita web|url=https://support.discord.com/hc/it/articles/360004957991-Il-tuo-Pacchetto-Dati-di-Discord|titolo=Il tuo Pacchetto Dati di Discord}}</ref> degli utenti a lui visibili, che include:
 
Per fare bot più complessi, è suggerito usare la libreria ''discord.ext.commands''<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/stable/ext/commands/index.html|titolo=discord.ext.commands – Bot commands framework|sito=discordpy.readthedocs.io|lingua=EN|accesso=2023-10-26}}</ref>, compresa in ogni installazione di discord.py. Esempi più avanzati si possono trovare [https://github.com/Rapptz/discord.py/tree/master/examples sul sito GitHub della libreria].<syntaxhighlight lang="python3" line="1">
* l'[[indirizzo IP]]
# Questo esempio necessita avere l'intento 'message_content' abilitato.
* l'account connesso a Discord ([[Twitch.tv|Twitch]], [[Twitter]], [[Steam (informatica)|Steam]], [[spotify]])
* il numero discriminatore<ref>Quattro cifre, separate dal nome utente da un'hashtag, che anche i Bot a loro volta hanno.</ref>
* una lista di qualsiasi [[sessione]] attiva: PC, cellulare, [[browser]] (incluso indirizzo IP)
* la lista degli amici
* la lista degli utenti bloccati
* informazioni sui pagamenti (Nitro<ref>Servizio a pagamento, abbonamento "premium" di Discord</ref>)
* informazioni sviluppatore<ref>[https://discord.com/developers/applications Discord Developer Portal] associa ogni Bot all'utente che l'ha creato.</ref> (per [[webhook]]s, Bot)
* la lista degli utenti. (Dall'aggiornamento alla versione 1.7 ha causato problemi<ref>{{Cita web|url=https://stackoverflow.com/questions/64518536/discord-py-ctx-guild-members-only-returns-bot|titolo=discord.py - discord py, ctx.guild.members, only returns bot|sito=Stack Overflow|accesso=2021-05-11}}</ref>, in quanto necessita di abilitare da Discord Developer Portal<ref>{{Cita web|url=https://python.tutorialink.com/how-to-get-all-members-of-a-guild-in-discord-py/|titolo=discord.guild.members|sito=Python.tutoriallink.com}}</ref> una funzione privilegiata<ref>{{Cita web|url=https://discordpy.readthedocs.io/en/latest/intents.html|titolo=discord.Intents|accesso=11 Maggio 2021}}</ref>)
 
=== Esempi di codice ===
 
Il codice seguente è lo stretto necessario per un programma che semplicemente porti il Bot online.<syntaxhighlight lang="python3">
import discord
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")
 
class MyClient(discord.Client):
Bot.run(token)
async def on_ready(self):
</syntaxhighlight>Il codice di cui sotto contiene un piccolo evento aggiunto, che stampa a schermata ''<code>Bot#1127 è ora online ID: 12345678</code>''<syntaxhighlight lang="python3">
"""Funzione chiamata dalla libreria quando il cache
@Bot.event
interno del cliente è completamente popolato."""
async def on_ready():
print(Bot.user, " è ora online ", "ID: ", Bot.user.id)
print(f'Autenticato come {self.user} (ID: {self.user.id})')
await Bot.change_presence(status = discord.Status.idle, activity = gioco)
print(f'Sono in {len(self.guilds)} server, e vedo {len(bot.users)} utenti.')
</syntaxhighlight>
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)
Botclient.run('token del bot')
</syntaxhighlight>''Questo esempio è una copia modificata e tradotta dell'esempio ufficiale [https://github.com/Rapptz/discord.py/blob/master/examples/reply.py reply.py]''
 
== Note ==