<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Discord - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Discord - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 10 May 2026 13:50:09 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/tag/discord/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Guida per Discord Bot con Python - Crea un Bot per Discord e hostalo gratuitamente ]]>
                </title>
                <description>
                    <![CDATA[ Questo tutorial mostra come costruire il tuo bot Discord completamente nel cloud. Non hai bisogno di installare nulla sul tuo computer, e non hai bisogno di pagare nulla per hostare il tuo bot. Useremo vari strumenti, quali Discord API, librerie di Python, e una piattaforma di cloud computing chiamata Repl.it ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/bot-discord-python/</link>
                <guid isPermaLink="false">621df5e0db2217050c2ed034</guid>
                
                    <category>
                        <![CDATA[ Discord ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Wed, 02 Mar 2022 09:12:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/discordbot.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Discord Bot Tutorial – Code a Discord Bot And Host it for Free</a>
      </p><p>Questo tutorial mostra come costruire il tuo bot Discord completamente nel cloud.</p><p>Non hai bisogno di installare nulla sul tuo computer, e non hai bisogno di pagare nulla per hostare il tuo bot.</p><p>Useremo vari strumenti, quali Discord API, librerie di Python, e una piattaforma di cloud computing chiamata <a href="https://www.repl.it/">Repl.it</a>.</p><p>C'è anche una versione video di questo tutorial. Il video è qua sotto, e la versione scritta dopo il video.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 74.94345494791824%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/SPTfmiYiuok?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded content" loading="lazy" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 663.188px; height: 497.016px;"></iframe>
          </div>
        </div>
      </figure><h2 id="come-creare-un-account-discord-bot"><strong>Come creare un Account Discord Bot</strong></h2><p>Per lavorare con la libreria di Python e la API di Discord dobbiamo prima creare un account Bot in Discord.</p><p>Ecco gli step per creare un account Discord Bot.</p><p>1. Assicurati di avere fatto il lod in sul sito <a href="https://discord.com/">web di Discord</a>.</p><p>2. Naviga alla <a href="https://discord.com/developers/applications">pagina delle applicazioni</a>.</p><p>3. Usa il pulsante “New Application”.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-117.png" class="kg-image" alt="image-117" width="600" height="400" loading="lazy"></figure><p>4. Dai un nome all'applicazione e usa il pulsante “Create”.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-118.png" class="kg-image" alt="image-118" width="600" height="400" loading="lazy"></figure><p>5. Vai alla scheda “Bot” e premi “Add Bot”. Dovrai confermarlo premento il pulsante "Yes, do it!"</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-119.png" class="kg-image" alt="image-119" width="600" height="400" loading="lazy"></figure><p>Usa le impostazioni di default per <strong><strong>Public Bot</strong></strong> (segnato) e <strong><strong>Require OAuth2 Code Grant</strong></strong> (non segnato).</p><p>Il tuo bot è stato creato. Lo step successivo è copiare il token.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-122.png" class="kg-image" alt="image-122" width="600" height="400" loading="lazy"></figure><p>Questo token è la password del tuo bot, quindi non condividerla con nessuno. Permetterebbe ad altri di accedere al tuo bot e fare cose cattive.</p><p>Puoi rigenerare il token se viene condiviso accidentalmente.</p><h2 id="come-invitare-il-tuo-bot-a-unirsi-a-un-server"><strong>Come invitare il tuo bot a unirsi a un server</strong></h2><p>Ora devi inserire il tuo bot in un server. Per farlo devi creare un URL di invito per esso.</p><p>Vai alla scheda "OAuth2". Poi seleziona "bot" nella sezione "scopes".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-123.png" class="kg-image" alt="image-123" width="600" height="400" loading="lazy"></figure><p>Ora scegli i permessi che vuoi che il tuo bot abbia. Il tuo bot userà principalmente messaggi di testo quindi non ha bisogno di molte autorizzazioni. Potresti aver bisogno di più autorizzazioni a seconda di cosa vuoi che il tuo bot faccia. Fai attenzione con l'autorizzazione "Administrator".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-124.png" class="kg-image" alt="image-124" width="600" height="400" loading="lazy"></figure><p>Dopo aver seleziono le autorizzazioni approrpiate, usa il pulsante "copy" sopra le autorizzazioni, così da copiare un URL che può essere usato per aggiungere il bot a un server.</p><p>Incolla l'URL nel tuo broswe, seleziona un server a cui invitare il bot e premi il pulsante "Authorize".</p><p>Per aggiungere il bot, il tuo account ha bisogno dell'autorizzazione &nbsp;"Manage Server".</p><p>Ora che hai creato l'utente bot, iniziamo a scrivere il codice in Python per il bot.</p><h2 id="come-programmare-un-bot-per-discord-basico-con-la-libreria-discord-py"><strong>Come programmare un Bot per discord basico con la libreria discord.py</strong></h2><p>Useremo la libreria discord.py per scrivere il codice del bot, è un wrapper per la API di Discord che rende più semplice creare un bot Discord in Python.</p><h3 id="come-creare-un-repl-e-installare-discord-py"><strong>Come creare un Repl e installare discord.py</strong></h3><p>Puoi sviluppare il bot sul tuo computer con qualsiasi editor di codice, però in questo tutorial useremo Replit perché rende più semplice per tutti seguire il tutorial. Replit è un IDE online che puoi usare nel tuo browser.</p><p>Inizia andando su <a href="https://repl.it/" rel="nofollow noopener">Repl.it</a> e crea un nuovo Repl, scegli Python come linguaggio da usare.</p><p>Per usare la libreria discord.py scrivi semplicemente <code>import discord</code> in cima al file <code>main.py</code>, e replit installerà automaticamente la dipendenza quando usi il pulsante "Run"<code><code>.</code></code></p><p>Se preferisci programmare il locale. puoi usare questo comando su macOS per installare discord.py:</p><p><code>python3 -m pip install -U discord.py</code></p><p>Potresti dover usare <code>pip3</code> invece di <code>pip</code>.</p><p>Se stai usando Windows allora dovresti usare questa riga di comando:</p><p><code>py -3 -m pip install -U discord.py</code></p><h3 id="come-impostare-gli-eventi-discord-per-il-tuo-bot"><strong>Come impostare gli eventi Discord per il tuo bot</strong></h3><p>discord.py è incentrato sul concetto di eventi. Un evento è qualcosa a cui ascolti e poi rispondi. Per esempio quando un messaggio viene mandato, riceverai un evento legato a cui puoi rispondere.</p><p>Facciamo un bot che risponde a uno specifico messaggio. Questo semplice codice per il bot, assieme alla spiegazione, è preso dalla <a href="https://discordpy.readthedocs.io/en/latest/quickstart.html#a-minimal-bot">documentazione ufficiale di discord.py</a>. Aggiungeremo altre funzionalità al bot più tardi.</p><p>Aggiungi questo codice a main.py. (puoi chiamare il file come vuoi, basta che non si chiami discord.py). Spiegherò cosa fa questo codice in un momento.</p><pre><code class="language-python">import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))</code></pre><p>Quando hai creato il tuo utente bot su Discord, hai ottenuto un token. Ora salveremo questo token nella tab Secrets.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/02/image-2.png" class="kg-image" alt="image-2" width="274" height="431" loading="lazy"></figure><p>In questo modo il Token rimarrà segreto. Al di fuori di repl.it useresti un file <code>.env</code> per dichiarare le variabili di ambiente.</p><p>Quindi, se stai sviluppando su Repl.it, includi solo informazioni private come token o chiavi tab Secrets.</p><p>Per salvare il tuo Token, scrivi <code>TOKEN</code> nel campo "key", e incolla il token che hai preso dalle impostazioni del bot nel campo "value", poi premi "Add new secret".</p><p>Ora vediamo cosa fa ogni riga di codice nel tuo bot Discord.</p><ol><li>La prima riga importa la libreria discord.py.</li><li>La seconda riga importa la libreria os, che è usata per ottenere la variabile TOKEN dal file <code>.env</code> (o dalla tab Secrets nel caso di replit).</li><li>Poi, creiamo una istanza di <code>Client</code>. Questa è la connessione con Discord.</li><li>Il decoratore <code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.event">@client.event()</a></code> è usato per registrare un evento. Questa è una libreria asincrona, quindi le cose sono eseguite tramite i callback. Un callback è una funzione che è chiamata quando qualcos altro accade. In questo caso la funzione <code>on_ready()</code> è chiamata quando il bot è pronto a iniziare a essere usato. Poi, quando il bot riceve un messaggio, viene chiamato l'evento <code>on_message()</code>.</li><li>L'evento <code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message">on_message()</a></code> è attivato ogni volta che un messaggio viene ricevuto, ma non vogliamo che accada nulla se il messaggio è da noi stessi (dal bot). Quindi se l'autore del messaggio <code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.author">Message.author</a></code> è uguale a <code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.user">Client.user</a></code> il codice semplicemente ritorna.</li><li>Poi controlliamo se il contenuto del messaggio <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.content"><code>Message.content</code></a> inizia con <code>'$hello'</code>. In tal caso il bot risponde con <code>'Hello!'</code> nello stesso canale.</li><li>Ora che il bot è impostato, l'ultima riga esegue il bot con il token per il login, prendendo il token dai nostri Secrets.</li></ol><p>Abbiamo il codice del bot, ora dobbiamo eseguirlo.</p><h3 id="come-eseguire-il-bot"><strong>Come eseguire il Bot</strong></h3><p>Clicka il pulsante Run in cima alla pagina per eseguire il tuo bot su replit.</p><p>Se stai scrivendo il tuo bot in locale, puoi usare questi comandi nel terminale per eseguire il bot:</p><p>Su Windows:</p><p><code>py -3 main.py</code></p><p>Su altri sistemi:</p><p><code>python3 main.py</code></p><p>Ora vai sul tuo server Discord e scrivi "$hello". Il tuo bot dovrebbe rispondere con "Hello!".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-141.png" class="kg-image" alt="image-141" width="600" height="400" loading="lazy"></figure><h2 id="come-migliorare-il-bot"><strong>Come migliorare il bot</strong></h2><p>Ora che abbiamo un bot basilare funzionante, lo miglioreremo. Si chiama "Encourage Bot" per una ragione.</p><p>Questo bot risponderà con un messaggio di incoraggiamento ogni volta che qualcuno usa una parola triste o deprimente.</p><p>Chiunque sarà in grado di aggiungere messaggi da far usare al bot e i messaggi creati dagli utenti saranno immagazzinati nel database di replit.</p><p>Il bot avrà anche la funzionalità di mandare una citazione ispirante da una API quando qualcuno scrive "$inspire" nella chat.</p><p>Iniziamo aggiungendo la funzione "$inspire".</p><h3 id="come-aggiungere-citazioni-ispiranti-al-bot"><strong>Come aggiungere citazioni ispiranti al bot</strong></h3><p>Otterremo le citazioni da una API chiamata zenquotes.io. Dobbiamo importare un altro paio di moduli Python, <code>get_quote()</code> function, e aggiornare il nostro bot affinché la usi.</p><p>Ecco il codice aggiornato, dopo il codice spiegherò le nuove parti.</p><pre><code class="language-python">import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))</code></pre><p>Adesso dobbiamo importare il modulo <code>requests</code> che permette di fare richieste HTTP &nbsp;per ottenere dati dalla API, l'API restituisce JSON, e il modulo <code>json</code> ci rende più facile lavorare con i dati ricevuti.</p><p>La funzione <code>get_quote()</code> è piuttosto semplice: come prima cosa usa il modulo requests per richiedere dati dall'URL dell'API. L'API restituisce una citazione casuale (questa funzione può facilmente essere riscritta per usare una API diversa se questa smette di funzionare).</p><p>Poi, dentro la funzione usiamo <code>json.loads()</code> per convertire la risposta dell'API in JSON. Con svariate prove sono riuscito a ottenere la citazione dal JSON nel formato stringa che volevo. La citazione è restituita dalla funzione come una stringa.</p><p>L'ultima parte che è stata aggiunta è verso la fine. Prima guardava per un messaggio che inizia con "$hello", ora guarda per "$inspire", e invece di restituire "Hello!" ottiene la citazione con <code>quote = get_quote()</code> e restituisce la citazione.</p><p>A questo punto puoi eseguire il codice e provarlo.</p><h2 id="come-aggiungere-messaggi-di-incoraggiamento-al-bot"><strong>Come aggiungere messaggi di incoraggiamento al bot</strong></h2><p>Ora implementeremo la funzione in cui il bot risponde con un messaggio incoraggiante quando un utente usa una parola triste in un messaggio.</p><h3 id="come-aggiungere-le-parole-tristi-al-bot"><strong>Come aggiungere le parole tristi al bot</strong></h3><p>Prima dobbiamo creare una lista di Python che contiene le parole tristi a cui il bot dovrà rispondere.</p><p>Aggiungi la seguente riga dopo che è stata creata la variabile <code>client</code>:</p><p><code>sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]</code></p><p>Aggiungi liberamente altre parole alla lista.</p><h3 id="come-aggiungere-messaggi-incoraggianti-al-bot"><strong>Come aggiungere messaggi incoraggianti al bot</strong></h3><p>Ora aggiungeremo una lista di messaggi incoraggianti che il bot può usare per rispondere.</p><p>Aggiungi questa lista dopo la lista <code>sad_words</code> che hai creato:</p><pre><code class="language-python">starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]</code></pre><p>Come prima, aggiungi liberamente altre frasi di tua scelta alla lista. Sto usando solo tre elementi per adesso perché poi aggiungeremo l'abilità di avere gli utenti aggiungere nuove frasi che il bot possa usare.</p><h3 id="come-rispondere-ai-messaggi"><strong>Come rispondere ai messaggi</strong></h3><p>Ora dobbiamo aggiornare il nostro bot per usare le due liste che abbiamo creato. Come prima cosa importa il modulo random così il bot sceglierà i messaggi incoraggianti casualmente. Aggiungi questa riga agli import in cima al file: <code>import random</code>.</p><p>Ora aggiorneremo la funzione <code>on_message()</code> per controllare tutti i messaggi e vedere se contengono una delle parole nella lista <code>sad_words</code>, e se una è trovata il bot risponderà con un incoraggiamento casuale.</p><p>Ecco il codice aggiornato:</p><pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))</code></pre><p>Questo è un buon momento per testare il bot. Ora ne sai abbastanza per creare il tuo bot, ma prima imparerai come implementare funzionalità più avanzare e immagazzinare dati usando il database di replit.</p><h3 id="come-attivare-i-messaggi-aggiunti-dagli-utenti"><strong>Come attivare i messaggi aggiunti dagli utenti</strong></h3><p>Il bot è completamente funzionale, ma ora vogliamo rendere possibile aggiornare il bot direttamente da Discord: un utente dovrebbe essere in grado di aggiungere nuovi messaggi incoraggianti alla lista di messaggi che il bot usa.</p><p>Useremo il database integrato in replit per immagazzinare i messaggi creati dagli utenti, è un database chiave-valore integrato in ogni repl.</p><p>In cima al codice, sotto gli altri import, aggiungi <code>from replit import db</code>, questo ci permetterà di usare il database di replit.</p><p>Gli utenti avranno la possibilità di aggiungere messaggi incoraggianti personalizzati alla lista disponibile al bot direttamente da Discord. Ma prima di creare nuovi comandi per il bot, creiamo due funzioni che aggiungono e rimuovono i messaggi personalizzati dal database.</p><p>Aggiungi questo codice dopo la funzione <code>get_quote()</code>:</p><pre><code class="language-python">def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements</code></pre><p>La funzione <code>update_encouragements()</code> accetta un messaggio incoraggiante come argomento.</p><p>Prima controlla se "encouragements" è una chiave nel database, se sì ottiene la lista dei messaggi già presenti nel database, aggiunge il nuovo messaggio alla lista, e salva la lista aggiornata nel database sotto la chiave "encouragements".</p><p>Se il database non contiene la chiave "encouragements", allora crea una nuova chiave con questo nome, e il nuovo messaggio di incoraggiamento è aggiunto come primo elemento della lista.</p><p>La funzione <code>delete_encouragement()</code> accetta un indice come argomento.</p><p>Ottiene la lista degli incoraggiamenti dal database salvati sotto la chiave "encouragements". Se il numero degli elementi nella lista è maggiore del valore di inev allora l'elemento a quell'indice viene eliminato.</p><p>Infine la lista aggiornata è salvata di nuovo nel database sotto la chiave "encouragements".</p><p>Ecco il codice aggiornato per la funzione <code>on_message()</code>. Dopo il codice spiego questa nuova sezione.</p><pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content
 
  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  options = starter_encouragements
  if "encouragements" in db.keys():
    options = options + db["encouragements"]

  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)</code></pre><p>La prima riga nuova nel codice qua sopra è <code>options = starter_encouragements</code>. Stiamo facendo una copia di <code>starter_encouragements</code> perché aggiungeremo i messaggi creati dagli utenti alla lista prima di scegliere il messaggio casuale che il bot userà.</p><p>Controlliamo se "encouragements" è già una chiave nel database (cioè se gli utenti hanno creato almeno un messaggio personalizzato). Se è così, aggiungiamo i messaggi creati dagli utenti ai messaggi iniziali di incoraggiamento.</p><p>Poi, invece di inviare un messaggio casuale da <code>starter_encouragements</code>, il messaggio è estratto casualmente da <code>options</code>.</p><p>La prossima sezione nuova è usata per aggiungere un messaggio creato dagli utenti al database. Se un messaggio di Discord inizia con "$new", il testo dopo "$new" sarà usato come messaggio incoraggiante.</p><p>Il codice <code>msg.split("$new ",1)[1]</code> divide il messaggio dal comando "$new" e salva il emssaggio in una variabile. In questa riga di codice nota lo spazio in &nbsp;<code>"$new "</code>. Vogliamo tutto <em>dopo</em> lo spazio.</p><p>Poi chiamiamo la funzione aiutante <code>update_encouragements</code> con il nuovo messaggio e poi il bot manda un messaggio confermando che il nuovo messaggio è stato aggiunto.</p><p>La terza sezione (alla fine del codice esaminato qua dopra) controlla se un messaggio inizia con &nbsp;"$del". Questo è il comando per eliminare un messaggio dalla lista "encouragements" nel database.</p><p>Come prima cosa una variabile chiamata <code>encouragements</code> è inizializzata come array vuoto. La ragione per questo è che la sezione del codice manderà un messaggio con un array vuoto se il database non include la chiave "encouragement".</p><p>Se la chiave &nbsp;"encouragement" è nel database, l'indice sarà separato dal messaggio che inizia con "$del". Allora, la funzione <code>delete_encouragement()</code> è chiamata con argomento l'indice così ottenuto. La lista aggiornata è caricata nella variabile <code>encouragements</code> e il bot manda un messaggio a Discord con l'attuale lista.</p><h2 id="funzionalit-finali-del-bot"><strong>Funzionalità finali del bot</strong></h2><p>Il bot dovrebbe funzionare ed è un buon momento per testarlo. Aggiungeremo adesso alcune funzionalità finali.</p><p>Aggiungeremo l'abilità di ottenere una lista di messaggi creati dagli utenti direttamente da Discord, e aggiungeremo l'abilità di attivare e disattivare la funzionalità della risposta alle parole tristi.</p><p>Ti darò il codice completo del programma, poi discuterò gli aggiornamenti sotto il codice.</p><pre><code class="language-python">import discord
import os
import requests
import json
import random
from replit import db

client = discord.Client()

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

if "responding" not in db.keys():
  db["responding"] = True

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]["q"] + " -" + json_data[0]["a"]
  return(quote)

def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements

@client.event
async def on_ready():
  print("We have logged in as {0.user}".format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  if db["responding"]:
    options = starter_encouragements
    if "encouragements" in db.keys():
      options = options + db["encouragements"]

    if any(word in msg for word in sad_words):
      await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)

  if msg.startswith("$list"):
    encouragements = []
    if "encouragements" in db.keys():
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
    
  if msg.startswith("$responding"):
    value = msg.split("$responding ",1)[1]

    if value.lower() == "true":
      db["responding"] = True
      await message.channel.send("Responding is on.")
    else:
      db["responding"] = False
      await message.channel.send("Responding is off.")

client.run(os.getenv("TOKEN"))</code></pre><p>La prima sezione aggiunta al codice è sotto la lista <code>starter_encouragements</code>:</p><pre><code class="language-python">if "responding" not in db.keys():
  db["responding"] = True</code></pre><p>Creiamo una nuova chiave nel database chiamata "responding" e la impostiamo su "True". Useremo questo per determinare se il bot debba rispondere alle parole tristi o no. Visto che il database è salvato anche dopo che il programma smette di eseguire, creiamo la nuova chiave solo se non esiste.</p><p>La parte successiva del codice è che la sezione del codice che risponde alle parole tristi è ora all'interno di una istruzione if: <code>if db["responding"]:</code>. Il bot risponderà alle parole tristi solo se <code>db["responding"] = True</code>. L'abilità di cambiare questo valore viene nella sezione successiva.</p><p>Poi, dopo il codice che fa sì che il bot risponda a "$del", c'è del nuovo codice che fa rispondere a un comando "$list".</p><p>Questa sezione inizia creando una lista vuota chiamata <code>encouragements</code>. Quindi, se ci sono già incoraggiamenti nel database, questi rimpiazziano la lista vuota appena creata.</p><p>Infine, il bot manda la lista di incoraggiamenti in un messaggio su Discord.</p><p>L'ultima nuova sezione viene come successiva. Questo codice fa si che il bot risponda al comando "$responding". Questo comando prende un argomento di "true" o "false". Ecco un esempio di utilizzo: "$responding true".</p><p>Il codice prima estrae l'argomento dal messaggio con <code>value = msg.split("$responding ",1)[1]</code> (come prima, nota il messaggio in <code>"$responding "</code>). Poi c'è una istruzione if/else che imposta la chiave "responding" nel database e manda un messaggio di notifica a Discord. Se l'argomento è diverso da "true", il codice assume "false".</p><p>Il codice per il bot è completo! Puoi adesso esegurie il tuo bot e provarlo. Ma c'è un altro importante step da discutere.</p><h2 id="come-fare-s-che-il-tuo-bot-esegua-continuamente"><strong>Come fare sì che il tuo bot esegua continuamente</strong></h2><p>Se esegui il tuo bot in replit e poi chiudi la scheda, il bot smetterà di eseguire.</p><p>Ma ci sono due modi in cui puoi tenere il tuo bot in continua esecuzione, anche dopo aver chiuso il browser.</p><p>Il primo modo e il più semplice è abbonarsi a replit, il loro abbonamento più economico si chiama Hacker Plan e include 5 repl sempre attive.</p><p>Puoi ottenere tre mesi gratis con questo codice (limitato alle prime 1000 persone): &nbsp;https://repl.it/claim?code=tryalwayson2103</p><p>Una colta che hai fatto l'abbonamento, apri il tuo repl e clicca sul nome in cima, poi seleziona l'opzione "Always On".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-35-1.png" class="kg-image" alt="image-35-1" width="600" height="400" loading="lazy"></figure><p>C'è un altro metodo per tenere il tuo codice in esecuzione anche sul piano gratuito di replit. Replit continuerà a eseguire un server web anche dopo che la tab è stata chiusa, ma eseguirà solo per un'ora senza alcun uso.</p><p>Ecco cosa dice la documentazione di replit:</p><blockquote>Una volta eseguito, il server continuerà a eseguire nel backgroun anche dopo che chiudi la scheda del browser. Il server starà sveglio e attivo fino a un'ora dopo la sua ultima richiesta, dopo di che entrerà in uno stato dormiente. Repl addormentate si svegliano una volta ricevuta una nuova richiesta; non c'è alcuna necessità di eseguire di nuovo il repl. Ma se fai cambiamenti al tuo server allora dovrai farla ripartire per vedere cambiamenti riflessi nella versione live.</blockquote><p>Per mantenere il bot sempre attivo useremo un altro servizio gratuito, <a href="https://uptimerobot.com/">https://uptimerobot.com/</a>.</p><p>Uptime Robot può essere impostato per fare un ping al server del bot ogni 5 minuti. Con ping costanti, il bot non entrerà mai nella fase dormiente e continuerà a eseguire.</p><p>Quindi dobbiamo fare altre due cose per avere un bot sempre in esecuzione:</p><ol><li>creare un server web in replit e </li><li>impostare Uptime Robot per mandare ping continui al server.</li></ol><h3 id="come-creare-un-server-web-in-replit"><strong>Come creare un server web in replit</strong></h3><p>Creare un server web è più semplice di quanto tu possa pensare.</p><p>Per farlo crea un nuovo file nel tuo progetto chiamato <code>keep_alive.py</code>.</p><p>Quindi aggiungi questo codice:</p><pre><code class="language-python">from flask import Flask
from threading import Thread

app = Flask('')

@app.route('/')
def home():
    return "Hello. I am alive!"

def run():
  app.run(host='0.0.0.0',port=8080)

def keep_alive():
    t = Thread(target=run)
    t.start()
</code></pre><p>In questo codice usiamo Flask per iniziare un server web, il server restituisce "Hello. I am alive." a chiunque lo visiti. Il server eseguirà su un thread separato rispetto al nostro bot. Non discuteremo tutto qui visto che il resto non è rilevante per il nostro bot.</p><p>Ora abbiamo solo bisogno che il nostro bot esegua questo server web.</p><p>Aggiungi la seguente riga verso la cima di <code>main.py</code> per importare il server.</p><pre><code class="language-python">from keep_alive import keep_alive</code></pre><p>Per iniziare il server web quando <code>main.py</code> viene eseguito, aggiungi la seguente riga come penultima riga del fila, proprio prima che il bot venga eseguito.</p><p><code>keep_alive()</code></p><p>Quando esegui il bot on replit dopo aver aggiunto questo codice una nuova finestra per il server web si aprirà, e c'è un URL mostrato per il server web, copia questo url, lo useremo nella prossima sezione.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-20-1.png" class="kg-image" alt="image-20-1" width="600" height="400" loading="lazy"></figure><h3 id="come-impostare-uptime-robot"><strong>Come impostare Uptime Robot</strong></h3><p>Ora dobbiamo impostare Uptime Robot affinché mandi un ping al nostro web server ogni cinque mintui. Questo farà si che il bot esegua continuamente.</p><p>Crea un account gratuito su <a href="https://uptimerobot.com/">https://uptimerobot.com/</a>.</p><p>Una volta che hai fatto accesso con il tuo account, clicca su "Add New Monitor".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-21-1.png" class="kg-image" alt="image-21-1" width="600" height="400" loading="lazy"></figure><p>Per il nuovo monitor, seleziona "HTTP(s)" come Monitor Type e chiamalo come preferisci, poi incolla l'url del web server e clicca su "Create Monitor".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-22-1.png" class="kg-image" alt="image-22-1" width="600" height="400" loading="lazy"></figure><p>E con questo abbiamo finito! Ora il tuo bot eseguirà continuamente su replit e gli utenti potranno sempre interagirci!</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Ora sai come creare un bot Discord con Python e eseguirlo continuosamente nel cloud.</p><p>Ci sono un sacco di altre cose che la libreria discord.py può fare. Se vuoi dare ancora più funzionalità al tuo bot il tuo prossimo passo è consultare la <a href="https://discordpy.readthedocs.io/en/latest/index.html">documentazione ufficiale di discord.py</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come creare un Bot per Discord in JavaScript: scrivi un bot Discord e ospitalo gratuitamente ]]>
                </title>
                <description>
                    <![CDATA[ Questo tutorial ti mostrerà come utilizzare JavaScript e Node.js per creare il tuo bot Discord completamente nel cloud. Non devi installare nulla sul tuo computer e non devi pagare nulla per ospitare il tuo bot. Utilizzeremo una serie di strumenti, tra cui l'API Discord, le librerie Node.js e una piattaforma ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/bot-discord-javascript/</link>
                <guid isPermaLink="false">61f8ff34184ddc0518e72745</guid>
                
                    <category>
                        <![CDATA[ Discord ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Tue, 08 Feb 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/02/discordjs.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-javascript-nodejs/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Discord Bot Tutorial – Code a Discord Bot And Host it for Free</a>
      </p><p>Questo tutorial ti mostrerà come utilizzare JavaScript e Node.js per creare il tuo bot Discord completamente nel cloud.</p><p>Non devi installare nulla sul tuo computer e non devi pagare nulla per ospitare il tuo bot.</p><p>Utilizzeremo una serie di strumenti, tra cui l'API Discord, le librerie Node.js e una piattaforma di cloud computing chiamata <a href="https://www.repl.it/">Repl.it</a> .</p><p>Se preferisci codificare il tuo bot discord usando Python invece di JavaScript, <a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-python/">leggi invece questo tutorial</a> .</p><p>C'è anche una versione video di questo tutorial scritto. Il video è riportato di seguito e la versione scritta è dopo il video.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 74.9053947368421%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/7rU_KyudGBY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded content" loading="lazy" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 760px; height: 569.281px;"></iframe>
          </div>
        </div>
      </figure><h2 id="come-creare-un-account-discord-bot"><strong>Come creare un account Discord Bot</strong></h2><p>Per poter lavorare con la libreria Node.js e l'API Discord, dobbiamo prima creare un account Bot su Discord.</p><p>Ecco i passaggi per creare un account Bot su Discord.</p><p>1. Assicurati di aver effettuato l'accesso al <a href="https://discord.com/">sito Web Discord</a> .</p><p>2. Passare alla <a href="https://discord.com/developers/applications">pagina dell'applicazione</a> .</p><p>3. Fare clic sul pulsante "New Application".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-117.png" class="kg-image" alt="image-117" width="600" height="400" loading="lazy"></figure><p>4. Assegna un nome all'applicazione e fai clic su "Create".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-118.png" class="kg-image" alt="image-118" width="600" height="400" loading="lazy"></figure><p>5. Vai alla scheda "Bot" e quindi fai clic su "Add Bot". Dovrai confermare facendo clic su "Yes, do it!"</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-119.png" class="kg-image" alt="image-119" width="600" height="400" loading="lazy"></figure><p>Mantieni le impostazioni predefinite per <strong><strong>Public Bot</strong></strong> (selezionato) e <strong><strong>Require OAuth2 Code Grant</strong></strong> (deselezionato).</p><p>Il tuo bot è stato creato. Il passaggio successivo consiste nel copiare il token.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-122.png" class="kg-image" alt="image-122" width="600" height="400" loading="lazy"></figure><p>Questo token è la password del tuo bot, quindi non condividerla con nessuno. Potrebbe consentire a qualcuno di accedere al tuo bot e fare ogni sorta di cose cattive.</p><p>Puoi rigenerare il token se viene condiviso accidentalmente.</p><h2 id="come-invitare-il-tuo-bot-a-unirsi-a-un-server"><strong>Come invitare il tuo bot a unirsi a un server</strong></h2><p>Ora devi portare il tuo utente bot in un server. Per fare ciò, dovresti creare un URL di invito per esso.</p><p>Vai alla scheda "OAuth2". Quindi seleziona "bot" nella sezione "scopes".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-123.png" class="kg-image" alt="image-123" width="600" height="400" loading="lazy"></figure><p>Ora scegli le autorizzazioni che desideri per il bot. Il nostro bot utilizzerà principalmente messaggi di testo, quindi non abbiamo bisogno di molte autorizzazioni. Potresti aver bisogno di più permessi a seconda di cosa vuoi che faccia il tuo bot. Fai attenzione con l'autorizzazione "Administrator".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-124.png" class="kg-image" alt="image-124" width="600" height="400" loading="lazy"></figure><p>Dopo aver selezionato le autorizzazioni appropriate, fai clic sul pulsante "copy" sopra le autorizzazioni. Ciò copierà un URL che può essere utilizzato per aggiungere il bot a un server.</p><p>Incolla l'URL nel tuo browser, scegli un server a cui invitare il bot e fai clic su "Authorize".</p><p>Per aggiungere il bot, il tuo account necessita dell'autorizzazione "Manage Server".</p><p>Ora che hai creato l'utente bot, inizieremo a scrivere il codice JavaScript per il bot.</p><h2 id="come-codificare-un-bot-discord-di-base-con-la-libreria-discord-js"><strong>Come codificare un bot Discord di base con la libreria discord.js</strong></h2><p>Useremo la libreria discord.js di Node per scrivere il codice per il bot. discord.js è un wrapper API per Discord che semplifica la creazione di un bot Discord in Node.js/JavaScript.</p><h3 id="come-creare-una-repl-e-installare-discord-js"><strong>Come creare una repl e installare discord.js</strong></h3><p>Puoi sviluppare il bot sul tuo computer locale con qualsiasi editor di codice. Tuttavia, in questo tutorial, useremo Repl.it perché renderà più semplice per chiunque seguirlo. Repl.it è un IDE online che puoi utilizzare nel tuo browser web.</p><p>Inizia andando su <a href="https://repl.it/" rel="nofollow noopener">Repl.it</a> . Crea un nuovo Repl e scegli "Node.js" come linguaggio. Ciò significa che il linguaggio di programmazione sarà JavaScript.</p><p>Per utilizzare la libreria discord.js, aggiungi semplicemente <code>const Discord = require("discord.js");</code>nella parte superiore di <code>main.js</code>. Questa guida è scritta per una versione precedente di discord.js, per installare questa versione esegui nel terminale (Shell) di Repl.it il seguente comando.</p><pre><code>&gt; npm install --save discord.js@12.5.3</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/02/image-1.png" class="kg-image" alt="image-1" width="550" height="134" loading="lazy"></figure><h3 id="come-impostare-gli-eventi-discord-per-il-tuo-bot"><strong>Come impostare gli eventi Discord per il tuo bot</strong></h3><p>discord.js ruota attorno al concetto di eventi. Un evento è qualcosa che ascolti e a cui poi rispondi. Ad esempio, quando arriva un messaggio, riceverai un evento al riguardo a cui puoi rispondere.</p><p>Creiamo un bot che risponda a uno specifico messaggio. Il &nbsp;codice per questo semplice bot è preso direttamente dalla <a href="https://discord.js.org/#/docs/main/stable/general/welcome">documentazione discord.js</a> . Aggiungeremo più funzionalità al bot in seguito.</p><p>Aggiungi questo codice a main.js. Spiegherò cosa fa tutto questo codice a breve.</p><pre><code class="language-javascript">const Discord = require("discord.js")
const client = new Discord.Client()

client.on("ready", () =&gt; {
  console.log(`Logged in as ${client.user.tag}!`)
})

client.on("message", msg =&gt; {
  if (msg.content === "ping") {
    msg.reply("pong");
  }
})

client.login(process.env.TOKEN)</code></pre><p>Quando hai creato il tuo utente bot su Discord, hai ottenuto un token. Ora salveremo questo token nella tab Secrets.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/02/image-2.png" class="kg-image" alt="image-2" width="274" height="431" loading="lazy"></figure><p>In questo modo il Token rimarrà segreto. Al di fuori di repl.it useresti un file <code>.env</code> per dichiarare le variabili di ambiente.</p><p>Quindi, se stai sviluppando su Repl.it, includi solo informazioni private come token o chiavi tab Secrets.</p><p>Per salvare il tuo Token, scrivi <code>TOKEN</code> nel campo "key", e incolla il token che hai preso dalle impostazioni del bot nel campo "value", poi premi "Add new secret".</p><p>Ora esaminiamo cosa fa ogni riga nel codice del tuo bot Discord.</p><p>La prima riga importa la libreria discord.js. Successivamente, creiamo un'istanza di un <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client"><code>Client</code></a>. Questa è la connessione a Discord.</p><p><code>client.on()</code> viene utilizzato per verificare la presenza di eventi . Accetta un nome di evento e quindi una funzione di callback da chiamare quando si verifica l'evento. In questo codice, l'evento &nbsp;<code>ready</code> viene chiamato quando il bot è pronto per iniziare a essere utilizzato. Quindi, quando il server Discord ha un nuovo messaggio, viene chiamato l'evento <code>message</code>.</p><p>Il codice controlla se <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.content"><code>msg.content</code></a> è uguale a <code>'ping'</code>. In tal caso, il bot risponde al canale con <code>'pong'</code>.</p><p>Ora che il bot è impostato, la riga finale esegue il bot con il token di accesso. Ottiene il token dal file <code>.env</code>.</p><p>Abbiamo il codice per il bot, quindi ora non ci resta che eseguirlo.</p><h3 id="come-eseguire-il-bot"><strong>Come eseguire il bot</strong></h3><p>Ora fai clic sul pulsante Esegui in alto per eseguire il tuo bot in repl.it.</p><p>Ora vai nella tua stanza Discord e digita "ping". Il tuo bot dovrebbe restituire "pong".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/03/image.png" class="kg-image" alt="image" width="600" height="400" loading="lazy"></figure><h2 id="come-migliorare-il-bot"><strong>Come migliorare il bot</strong></h2><p>Ora che abbiamo un bot di base funzionante, lo miglioreremo. Si chiama "Encourage Bot" per un motivo.</p><p>Questo bot risponderà con un messaggio di incoraggiamento ogni volta che qualcuno invia un messaggio contenente una parola triste o deprimente.</p><p>Chiunque potrà aggiungere nuovi messaggi incoraggianti nel bot e i messaggi inviati dall'utente verranno archiviati nel database Repl.it.</p><p>Il bot restituirà anche una citazione ispiratrice casuale tramite l'uso di un'API quando qualcuno digita il messaggio "$inspire" nella chat.</p><p>Inizieremo con l'aggiunta della funzione "$inspire".</p><h3 id="come-aggiungere-citazioni-di-ispirazione-al-bot"><strong>Come aggiungere citazioni di ispirazione al bot</strong></h3><p>Otterremo citazioni di ispirazione da un'API chiamata zenquotes.io. Dobbiamo importare il modulo node-fetch, aggiungere una funzione <code>getQuote()</code> e aggiornare il nostro codice bot per chiamare la funzione.</p><p>Ecco il codice aggiornato. Dopo il codice, spiegherò le nuove parti.</p><pre><code class="language-javascript">const Discord = require("discord.js")
const fetch = require("node-fetch")
const client = new Discord.Client()

function getQuote() {
  return fetch("https://zenquotes.io/api/random")
    .then(res =&gt; {
      return res.json()
      })
    .then(data =&gt; {
      return data[0]["q"] + " -" + data[0]["a"]
    })
}

client.on("ready", () =&gt; {
  console.log(`Logged in as ${client.user.tag}!`)
})

client.on("message", msg =&gt; {
  if (msg.author.bot) return
    
  if (msg.content === "$inspire") {
    getQuote().then(quote =&gt; msg.channel.send(quote))
  }
})

client.login(process.env.TOKEN)</code></pre><p>Ora dobbiamo importare il modulo &nbsp;<code>node-fetch</code>. Questo modulo consente al nostro codice di effettuare una richiesta HTTP per ottenere dati dall'API.</p><p>La funzione <code>getQuote()</code> è piuttosto semplice. Innanzitutto, utilizza il modulo node-fetch per richiedere i dati dall'URL dell'API. L'API restituisce una citazione ispiratrice casuale. Questa funzione potrebbe essere facilmente riscritta per ottenere citazioni da un'API diversa, se quella corrente smette di funzionare.</p><p>Quindi la funzione converte la risposta dall'API in JSON e crea una stringa da restituire. Attraverso tentativi ed errori ho capito come ottenere la citazione dal JSON nel formato stringa che volevo. La citazione viene restituita dalla funzione come stringa.</p><p>La restante parte di aggiornamento del codice è verso la fine. Prima cercava il messaggio "ping". Ora cerca "$inspire". Invece di restituire "pong", ottiene la citazione con <code>getQuote()</code> e la restituisce. Usiamo <code>msg.channel.send()</code> per inviare il messaggio al canale. Inoltre, il codice controlla se il messaggio proviene dal bot stesso e, in tal caso, esce dalla funzione in modo che non faccia nulla.</p><p>A questo punto puoi eseguire il tuo codice e provarlo.</p><h2 id="come-aggiungere-messaggi-incoraggianti-al-bot"><strong>Come aggiungere messaggi incoraggianti al bot</strong></h2><p>Ora implementeremo la funzione in cui il bot risponde con messaggi incoraggianti quando un utente pubblica un messaggio con una parola triste.</p><h3 id="come-aggiungere-parole-tristi-al-bot"><strong>Come aggiungere parole tristi al bot</strong></h3><p>Per prima cosa dobbiamo creare un array che contenga le parole tristi a cui risponderà il bot.</p><p>Aggiungi la seguente riga dopo aver creato la variabile <code>client</code>:</p><p><code>sadWords = ["sad", "depressed", "unhappy", "angry", "miserable"]</code></p><p>Sentiti libero di aggiungere più parole all'elenco.</p><h3 id="come-aggiungere-messaggi-incoraggianti-al-bot-1"><strong>Come aggiungere messaggi incoraggianti al bot</strong></h3><p>Ora aggiungeremo una serie di messaggi incoraggianti con cui il bot risponderà.</p><p>Aggiungi il seguente array dopo l'elenco &nbsp;<code>sadWords</code> che hai creato:</p><pre><code class="language-python">encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]</code></pre><p>Come prima, sentiti libero di aggiungere altre frasi a tua scelta all'array . Per ora sto usando solo tre elementi perché in seguito aggiungeremo la possibilità per gli utenti di aggiungere altre frasi incoraggianti da utilizzare per il bot.</p><h3 id="come-rispondere-ai-messaggi"><strong>Come rispondere ai messaggi</strong></h3><p>Ora dobbiamo aggiornare il nostro bot per utilizzare le due liste che abbiamo creato.</p><p>Ora aggiorneremo la funzione <code>message</code> per controllare tutti i messaggi per vedere se contengono una parola dall'elenco <code>sadWords</code>. Se viene trovata una parola triste, il bot invierà un messaggio casuale di incoraggiamento.</p><p>Ecco il codice aggiornato:</p><pre><code class="language-javascript">client.on("message", msg =&gt; {
  if (msg.content === "$inspire") {
    getQuote().then(quote =&gt; msg.channel.send(quote))
  }

  if (sadWords.some(word =&gt; msg.content.includes(word))) {
    const encouragement = encouragements[Math.floor(Math.random() * encouragements.length)]
    msg.reply(encouragement)
  }

})</code></pre><p>Questo è un buon momento per testare il bot. Adesso ne sai abbastanza per creare il tuo bot. Ma in seguito imparerai come implementare funzionalità più avanzate e archiviare i dati utilizzando il database Repl.it.</p><h3 id="come-abilitare-i-messaggi-inviati-dall-utente"><strong>Come abilitare i messaggi inviati dall'utente</strong></h3><p>Il bot è completamente funzionante, ma ora consentiamo di aggiornare il bot direttamente da Discord. Un utente dovrebbe essere in grado di aggiungere messaggi più incoraggianti che il bot può utilizzare quando rileva una parola triste.</p><p>Utilizzeremo il database integrato di Repl.it per archiviare i messaggi inviati dagli utenti. Questo database è un archivio di tipo chiave-valore integrato in ogni repl su &nbsp;Repl.it.</p><p>Nella parte superiore del codice, sotto le altre istruzioni di importazione, aggiungi:</p><pre><code class="language-javascript">const Database = require("@replit/database")
const db = new Database()</code></pre><p>Questo ci consentirà di utilizzare il database Repl.it. Quando esegui il codice, Repl.it dovrebbe installare automaticamente il modulo database. Se per qualche motivo non è così, potresti dover andare nella scheda Shell (non nella Console) e digitare "npm install @replit/database".</p><p>Dopo aver creato l'array &nbsp;<code>encouragements</code>, inserire il codice seguente per aggiungere gli incoraggiamenti al database, se necessario:</p><pre><code class="language-javascript">db.get("encouragements").then(encouragements =&gt; {
  if (!encouragements || encouragements.length &lt; 1) {
    db.set("encouragements", starterEncouragements)
  }  
})</code></pre><p>Inoltre, rinomina l'array &nbsp;<code>encouragements</code> &nbsp;in <code>starterEncouragements</code>.</p><p>Gli utenti potranno aggiungere messaggi di incoraggiamento personalizzati che il bot può utilizzare direttamente dalla chat di Discord. Prima di aggiungere nuovi comandi per il bot, creiamo due funzioni di supporto che aggiungeranno messaggi personalizzati al database e li cancelleranno.</p><p>Aggiungi il seguente codice dopo la funzione <code>getQuote()</code>:</p><pre><code class="language-javascript">function updateEncouragements(encouragingMessage) {
  db.get("encouragements").then(encouragements =&gt; {
    encouragements.push([encouragingMessage])
    db.set("encouragements", encouragements)
  })
}

function deleteEncouragment(index) {
  db.get("encouragements").then(encouragements =&gt; {
    if (encouragements.length &gt; index) {
      encouragements.splice(index, 1)
      db.set("encouragements", encouragements)
    }
  })
}</code></pre><p>La funzione <code>updateEncouragements()</code> accetta un messaggio incoraggiante come argomento.</p><p>Per prima cosa ottiene gli "incoraggiamenti" dal database. Quindi, aggiunge il nuovo incoraggiamento all'array e memorizza l'array aggiornato nel database sotto la chiave "encouragements".</p><p>La funzione <code>deleteEncouragement()</code> accetta un indice come argomento.</p><p>Ottiene l'elenco degli incoraggiamenti dal database archiviato nella chiave "encouragements". Se la lunghezza è maggiore dell'indice, la voce dell'elenco in quell'indice viene eliminata. Infine, l'elenco aggiornato viene nuovamente memorizzato nel database sotto il chiave "encouragements".</p><p>Ecco il codice aggiornato per la funzione <code>message</code>. Dopo il codice, spiegherò le nuove sezioni.</p><pre><code class="language-javascript">client.on("message", msg =&gt; {
  if (msg.content === "$inspire") {
    getQuote().then(quote =&gt; msg.channel.send(quote))
  }

  
  if (sadWords.some(word =&gt; msg.content.includes(word))) {
    db.get("encouragements").then(encouragements =&gt; {
      const encouragement = encouragements[Math.floor(Math.random() * encouragements.length)]
      msg.reply(encouragement)
    })
  }

  if (msg.content.startsWith("$new")) {
    encouragingMessage = msg.content.split("$new ")[1]
    updateEncouragements(encouragingMessage)
    msg.channel.send("New encouraging message added.")
  }

  if (msg.content.startsWith("$del")) {
    index = parseInt(msg.content.split("$del ")[1])
    deleteEncouragment(index)
    msg.channel.send("Encouraging message deleted.")
  }
})</code></pre><p>La sezione delle parole tristi è stata aggiornata per utilizzare i messaggi incoraggianti dal database in modo da poter utilizzare i messaggi inviati dagli utenti.</p><p>La successiva nuova sezione di codice &nbsp;viene utilizzata per aggiungere un nuovo messaggio inviato dall'utente al database. Se un messaggio Discord inizia con "$new", il testo dopo "$new" verrà utilizzato come nuovo messaggio di incoraggiamento.</p><p>Il codice <code>msg.content.split('$new ')[1]</code> separa il messaggio dal comando "$new" e memorizza il messaggio in una variabile. In quella riga di codice, prende nota dello spazio in <code>'$new '</code>. Vogliamo tutto <em><em>dopo</em></em> lo spazio.</p><p>Chiamiamo la funzione ausiliaria <code>updateEncouragements</code> con il nuovo messaggio, quindi il bot invia un messaggio alla chat discord confermando che il messaggio è stato aggiunto.</p><p>La terza nuova sezione (alla fine del codice sopra) controlla se un nuovo messaggio Discord inizia con "$del". Questo è il comando per eliminare un elemento dall'elenco "encouragements" nel database.</p><p>L'indice viene separato dal messaggio Discord che inizia con "$del". Quindi, la funzione <code>deleteEncouragement()</code> viene chiamata passando come parametro l'indice da eliminare. L'elenco aggiornato degli incoraggiamenti viene caricato nella variabile <code>encouragements</code>, quindi il bot invia un messaggio a Discord con l'elenco corrente.</p><h2 id="funzionalit-finali-del-bot"><strong>Funzionalità finali del bot</strong></h2><p>Il bot dovrebbe funzionare, quindi questo è un buon momento per testarlo. Ora aggiungeremo alcune funzionalità finali.</p><p>Aggiungeremo la possibilità di ottenere un elenco di messaggi inviati dall'utente direttamente da Discord e aggiungeremo la possibilità di disattivare e attivare il bot a risponde alle parole tristi.</p><p>Ti fornirò il codice finale completo del programma e poi discuterò gli aggiornamenti sotto il codice.</p><pre><code class="language-javascript">const Discord = require("discord.js")
const fetch = require("node-fetch")
const Database = require("@replit/database")

const db = new Database()
const client = new Discord.Client()

const sadWords = ["sad", "depressed", "unhappy", "angry", "miserable"]

const starterEncouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

db.get("encouragements").then(encouragements =&gt; {
  console.log(encouragements)
  if (!encouragements || encouragements.length &lt; 1) {
    db.set("encouragements", starterEncouragements)
  }  
})

db.get("responding").then(value =&gt; {
  if (value == null) {
    db.set("responding", true)
  }  
})

function getQuote() {
  return fetch("https://zenquotes.io/api/random")
    .then(res =&gt; {
      return res.json()
      })
    .then(data =&gt; {
      return data[0]["q"] + " -" + data[0]["a"]
    })
}

function updateEncouragements(encouragingMessage) {
  db.get("encouragements").then(encouragements =&gt; {
    encouragements.push([encouragingMessage])
    db.set("encouragements", encouragements)
  })
}

function deleteEncouragment(index) {
  db.get("encouragements").then(encouragements =&gt; {
    if (encouragements.length &gt; index) {
      encouragements.splice(index, 1)
      db.set("encouragements", encouragements)
    }
  })
}

client.on("ready", () =&gt; {
  console.log(`Logged in as ${client.user.tag}!`)
})

client.on("message", msg =&gt; {
  if (msg.content === "$inspire") {
    getQuote().then(quote =&gt; msg.channel.send(quote))
  }

  db.get("responding").then(responding =&gt; {
    if (responding &amp;&amp; sadWords.some(word =&gt; msg.content.includes(word))) {
      db.get("encouragements").then(encouragements =&gt; {
        const encouragement = encouragements[Math.floor(Math.random() * encouragements.length)]
        msg.reply(encouragement)
      })
    }
  })

  if (msg.content.startsWith("$new")) {
    encouragingMessage = msg.content.split("$new ")[1]
    updateEncouragements(encouragingMessage)
    msg.channel.send("New encouraging message added.")
  }

  if (msg.content.startsWith("$del")) {
    index = parseInt(msg.content.split("$del ")[1])
    deleteEncouragment(index)
    msg.channel.send("Encouraging message deleted.")
  }

  if (msg.content.startsWith("$list")) {
    db.get("encouragements").then(encouragements =&gt; {
      msg.channel.send(encouragements)
    })
  }
    
  if (msg.content.startsWith("$responding")) {
    value = msg.content.split("$responding ")[1]

    if (value.toLowerCase() == "true") {
      db.set("responding", true)
      msg.channel.send("Responding is on.")
    } else {
      db.set("responding", false)
      msg.channel.send("Responding is off.")
    }
  }
})

client.login(process.env.TOKEN)</code></pre><p>La prima sezione aggiunta al codice è proprio sotto l'elenco <code>starterEncouragements</code>:</p><pre><code class="language-javascript">db.get("responding").then(value =&gt; {
  if (value == null) {
    db.set("responding", true)
  }  
})</code></pre><p>Creiamo una nuova chiave nel database chiamata "responding" e la impostiamo su "true". Lo useremo per determinare se il bot deve rispondere a parole tristi o meno. Poiché il database viene salvato anche dopo che il programma si interrompe, creiamo la nuova chiave solo se non esiste già.</p><p>La successiva parte nuova del codice è nella sezione che risponde alle parole tristi che ora è &nbsp;all'interno di questa istruzione if. Il bot risponderà alle parole tristi solo se <code>db.get("responding") = true</code>. La possibilità di aggiornare questo valore viene dopo questa successiva sezione .</p><p>Successivamente, dopo il codice per fare in modo che il bot risponda al comando "$del", c'è un nuovo codice per rispondere al comando "$list" quando viene inviato come messaggio Discord.</p><p>Il bot invia l'elenco degli incoraggiamenti come messaggio Discord.</p><p>La nuova sezione finale viene dopo. Questo codice fa sì che il bot risponda al comando "$responding". Questo comando accetta un argomento di "true" o "false". Ecco un esempio di utilizzo: "$responding true".</p><p>Il codice prima estrae l'argomento con <code>value = msg.content.split("$responding ")[1]</code>(come prima, nota lo spazio in <code>"$responding "</code>). Quindi c'è un'istruzione if/else che imposta in modo appropriato la chiave di "responding" nel database e invia un messaggio di notifica a Discord. Se l'argomento è diverso da &nbsp;"true", il codice lo presuppone "falso".</p><p>Il codice per il bot è completo! Ora puoi eseguire il bot e provarlo. Ma c'è un altro passo importante che discuteremo in seguito.</p><h2 id="come-configurare-il-bot-per-l-esecuzione-continua"><strong>Come configurare il bot per l'esecuzione continua</strong></h2><p>Se esegui il tuo bot in repl.it e poi chiudi la scheda in cui è in esecuzione, il tuo bot smetterà di funzionare.</p><p>Ma ci sono due modi in cui puoi mantenere il tuo bot in esecuzione continua, anche dopo aver chiuso il tuo web bowser.</p><p>Il primo modo e il modo più semplice è iscriversi a un piano a pagamento su Repl.it. Il loro piano a pagamento più economico si chiama Hacker Plan e include cinque Repls sempre attivi.</p><p>Puoi ottenere tre mesi gratis utilizzando questo link (limitato alle prime 1000 persone): <a href="https://repl.it/claim?code=tryalwayson2103">https://repl.it/claim?code=tryalwayson2103</a></p><p>Dopo esserti iscritto a quel piano, apri il tuo Repl e fai clic sul nome in alto. Quindi seleziona l'opzione "Always On".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/03/image-36.png" class="kg-image" alt="image-36" width="600" height="400" loading="lazy"></figure><p>C'è un altro modo per mantenere il codice in esecuzione anche gratuitamente, ma è un po' più complicato. Repl.it continuerà a eseguire un server web anche dopo la chiusura della scheda. Ma anche un server web funzionerà solo per un'ora senza alcun utilizzo.</p><p>Ecco cosa dicono i documenti di repl.it:</p><blockquote>Una volta distribuito, il server continuerà a funzionare in background, anche dopo aver chiuso la scheda del browser. Il server rimarrà sveglio e attivo fino a un'ora dopo l'ultima richiesta, dopodiché entrerà in una fase di sospensione. Le risposte dormienti verranno svegliate non appena riceve un'altra richiesta; non è necessario eseguire nuovamente la repl. Tuttavia, se apporti modifiche al tuo server, dovrai riavviare la repl per vedere tali modifiche riflesse nella versione live.</blockquote><p>Per mantenere il bot continuamente in esecuzione, utilizzeremo un altro servizio gratuito chiamato Uptime Robot all'indirizzo <a href="https://uptimerobot.com/">https://uptimerobot.com/</a> .</p><p>Uptime Robot può essere impostato per eseguire il ping del server web del bot su repl.it ogni 5 minuti. Con ping costanti, il bot non entrerà mai nella fase dormiente e continuerà ad essere attivo.</p><p>Quindi dobbiamo fare altre due cose per far funzionare continuamente il nostro bot:</p><ol><li>creare un server web in repl.it e</li><li>impostare Uptime Robot per eseguire continuamente il ping del server web.</li></ol><h3 id="come-creare-un-web-server-in-repl-it"><strong>Come creare un Web Server in repl.it</strong></h3><p>Creare un server web è più semplice di quanto si possa pensare.</p><p>Per farlo, crea un nuovo file nel tuo progetto chiamato <code>server.js</code>.</p><p>Quindi aggiungi il seguente codice:</p><pre><code class="language-javascript">const express = require("express")

const server = express()

server.all("/", (req, res) =&gt; {
  res.send("Bot is running!")
})

function keepAlive() {
  server.listen(3000, () =&gt; {
    console.log("Server is ready.")
  })
}

module.exports = keepAlive</code></pre><p>In questo codice, utilizziamo express per avviare un server web. Il server restituisce "Bot is running!" a chiunque lo visiti. Il server verrà eseguito su un thread separato dal nostro bot. Non discuteremo di tutto qui poiché il resto non è realmente rilevante per il nostro bot.</p><p>Ora abbiamo solo bisogno del bot per eseguire questo server web.</p><p>Aggiungi la riga seguente all'inizio di <code>index.js</code> &nbsp;per importare il server.</p><pre><code class="language-python">const keepAlive = require("./server")</code></pre><p>Per avviare il server Web quando <code>index.js</code>viene eseguito, aggiungi la riga seguente come penultima riga, subito prima dell'esecuzione del bot.</p><p><code>keepAlive()</code></p><p>Quando esegui il bot su repl.it dopo aver aggiunto questo codice, si aprirà una nuova finestra del server web. C'è un URL mostrato per il server web. Copia l'URL in modo da poterlo utilizzare nella sezione successiva.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/image-1.png" class="kg-image" alt="image-1" width="600" height="400" loading="lazy"></figure><h3 id="come-impostare-uptime-robot"><strong>Come impostare <strong>Uptime Robot</strong></strong></h3><p>Ora dobbiamo impostare Uptime Robot per eseguire il ping del server Web ogni cinque minuti. Ciò farà sì che il bot funzioni continuamente.</p><p>Crea un account gratuito su <a href="https://uptimerobot.com/">https://uptirobot.com/</a> .</p><p>Una volta effettuato l'accesso al tuo account, fai clic su "Add New Monitor".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/12/image-21.png" class="kg-image" alt="image-21" width="600" height="400" loading="lazy"></figure><p>Per il nuovo monitor, seleziona "HTTP(s)" come Tipo di monitor e chiamalo come preferisci. Quindi, incolla l'URL del tuo server web da repl.it. Infine, fai clic su "Create Monitor".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/12/image-22.png" class="kg-image" alt="image-22" width="600" height="400" loading="lazy"></figure><p>Fatto! Ora il bot funzionerà continuamente in modo che le persone possano sempre interagire con esso su Repl.it.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Ora sai come creare un bot Discord con JavaScript ed eseguirlo continuamente nel cloud.</p><p>Ci sono molte altre cose che la libreria discord.js può fare. Quindi, se vuoi dare a un bot Discord ancora più funzionalità, il tuo prossimo passo è controllare <a href="https://discord.js.org/#/docs/main/stable/general/welcome">i documenti per discord.js.</a></p><p>Nota: questo tutorial si basa su una vecchia versione di discord.js, che potrebbe smettere di essere supportata in qualsiasi momento.</p><p></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
