Creazione di un bot Discord su .NET Core con deployment su un server VPS

Creazione di un bot Discord su .NET Core con deployment su un server VPS

Ciao, Habroviani!

Oggi vi familiarizzerete con un articolo in cui verrà spiegato come creare un bot utilizzando C# su .NET Core e come farlo funzionare su un server remoto.

L'articolo sarà composto da uno sfondo, una fase preparatoria, la scrittura della logica e il trasferimento del bot su un server remoto.

Spero che questo articolo aiuti molti principianti.

Antefatti

Tutto è iniziato in una fredda notte d'autunno in cui ho trascorso del tempo su Discord – il server. Poiché mi sono unito solo di recente, ho cominciato a esplorarlo a fondo. Trovando il canale testuale "Offerte di lavoro", mi sono interessato, l'ho aperto e ho trovato tra le offerte che non mi interessavano questa:

"Programmatore (sviluppatore di bot)
Requisiti:

  • conoscenza dei linguaggi di programmazione;
  • capacità di autoapprendimento.

Requisiti:

  • capacità di comprendere il codice altrui;
  • conoscenza delle funzionalità di DISCORD.

Compiti:

  • sviluppo del bot;
  • supporto e manutenzione del funzionamento del bot.

Vantaggi per te:

  • Possibilità di supportare e influenzare un progetto di tuo interesse;
  • Acquisizione di esperienza lavorativa in team;
  • Opportunità di dimostrare e migliorare le proprie competenze."


Questo mi ha subito colpito. Sì, per questo lavoro non veniva pagato, ma non c'erano obblighi da parte tua, e non sarebbe stato superfluo nel portfolio. Così ho scritto all'amministratore del server, e lui mi ha chiesto di scrivere un bot che mostri le statistiche dei giocatori in World of Tanks.

Fase preparatoria

Creazione di un bot Discord su .NET Core con deployment su un server VPS
Discord
Prima di iniziare a scrivere il nostro bot, è necessario crearlo per Discord. Devi:

  1. Accedere al tuo account Discord al link
  2. Nella scheda "Applications" cliccare sul pulsante "New Application" e dare un nome al bot
  3. Ottenere il token del bot, accedendo al tuo bot e trovando nella lista la scheda "Bot" sotto "Settings"
  4. Salvare il token da qualche parte

Wargaming

Inoltre, è necessario creare un'applicazione in Wargaming per ottenere accesso all'API di Wargaming. Anche qui è tutto semplice:

  1. Accedere al tuo account Wargaming seguendo questo link
  2. Entrare in "Le mie applicazioni" e cliccare sul pulsante "Aggiungi nuova applicazione", dando un nome all'applicazione e scegliendone il tipo
  3. Salvare l'ID dell'applicazione

Software

Qui c'è già libertà di scelta. C'è chi usa Visual Studio, chi Rider, chi utilizza addirittura un editor potente come Vim (del resto, i veri programmatori usano solo la tastiera, giusto?). Tuttavia, per non dover implementare il Discord API, si può utilizzare una libreria non ufficiale per C# chiamata “DSharpPlus”. Puoi installarla tramite NuGet o costruire il codice sorgente dal repository.

Per coloro che non sanno, o hanno dimenticato, come installare applicazioni da NuGet.Istruzioni per Visual Studio

  1. Andiamo alla scheda Progetto – Gestione pacchetti NuGet;
  2. Clicchiamo su esplora e inseriamo “DSharpPlus” nel campo di ricerca;
  3. Selezioniamo e installiamo il framework;
  4. PROFIT!

La fase preparatoria è terminata, possiamo passare alla scrittura del bot.

Scrittura della logica

Creazione di un bot Discord su .NET Core con deployment su un server VPS

Non analizzeremo tutta la logica dell'applicazione, mostrerò solo come gestire la ricezione dei messaggi dal bot e come interagire con l'API di Wargaming.

Il lavoro con il bot di Discord avviene tramite la funzione static async Task MainTask(string[] args);
Per chiamare questa funzione, nel Main deve essere scritto

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Successivamente, è necessario inizializzare il proprio bot:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

Dove token è il token del tuo bot.
Poi, tramite una lambda, scriviamo i comandi necessari che il bot deve eseguire:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Ciao, ” + e.Author.Username);
    }
};

Dove e.Author.Username si riferisce al nickname dell'utente.

In questo modo, quando invii qualsiasi messaggio che inizia con &, il bot ti darà il benvenuto.

Alla fine di questa funzione, è necessario scrivere await discord.ConnectAsync(); e await Task.Delay(-1);

Questo permetterà di eseguire i comandi in background, senza occupare il thread principale.

Ora dobbiamo capire l'API di Wargaming. Qui è tutto semplice: scrivi richieste CURL, ricevi la risposta in formato JSON, estrai i dati necessari e manipolali.

Esempio di utilizzo con WargamingAPI

public Player TrovaGiocatore(string cercaNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + cercaNickname;
            Player giocatore = null;
            string risultatoRisposta = GetResponse(urlRequest);
            dynamic analizzato = JsonConvert.DeserializeObject(risultatoRisposta);

            string stato = analizzato.status;
            if (stato == "ok")
            {
                int conteggio = analizzato.meta.count;
                if (conteggio > 0)
                {
                    giocatore = new Player
                    {
                        Nickname = analizzato.data[0].nickname,
                        Id = analizzato.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("Giocatore non trovato");
                }
            }
            else
            {
                string errore = analizzato.error.message;
                if (errore == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Richiesti almeno tre caratteri");
                }
                else if (errore == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Cerca non valida");
                }
                else if (errore == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Nickname vuoto");
                }
                else
                {
                    throw new Exception("Qualcosa è andato storto.");
                }
            }

            return giocatore;
        }

Attenzione! È fortemente sconsigliato conservare token e ID delle applicazioni in chiaro! Almeno, Discord banna tali token quando finiscono in rete pubblica, al massimo, il bot può essere sfruttato da malintenzionati.

Implementazione su VPS - server

Creazione di un bot Discord su .NET Core con deployment su un server VPS

Dopo aver terminato con il bot, è necessario ospitarlo su un server che funziona continuamente 24/7. Questo è dovuto al fatto che quando la tua applicazione è attivata, anche il bot è operativo. Non appena spegni l'applicazione, il tuo bot entra in modalità stand-by.

Esistono molti server VPS in questo mondo, sia su Windows che su Linux, ma nella maggior parte dei casi, è molto più economico ospitare su Linux.

Su Discord - server mi è stato consigliato vscale.io, e ho subito creato un server virtuale su Ubuntu e caricato il bot. Non descriverò come funziona questo sito, ma passerò direttamente alla configurazione del bot.

Per prima cosa, è necessario installare il software necessario che eseguirà il nostro bot, scritto in .NET Core. Come fare, è descritto qui.

Successivamente, è necessario caricare il bot su Git - un servizio come GitHub e simili e clonarlo su un server VPS, oppure, in altri modi, scaricare il tuo bot. Tieni presente che avrai solo la console, non ci sarà GUI. Affatto.

Dopo aver scaricato il tuo bot, è necessario avviarlo. Per fare ciò, devi:

  • Ripristinare tutte le dipendenze: dotnet restore
  • Costruire l'applicazione: dotnet build name_project.sln -c Release
  • Accedere al DLL costruito;
  • dotnet name_of_file.dll

Congratulazioni! Il tuo bot è in funzione. Tuttavia, il bot occupa la console e uscire dal server VPS non è così semplice. Inoltre, in caso di riavvio del server, dovrai avviare di nuovo il bot. Ci sono un paio di soluzioni a questa situazione. Tutte riguardano l'avvio al momento dell'accensione del server:

  • Aggiungere l'avvio dello script in /etc/init.d
  • Creare un servizio che si avvierà all'accensione.

Non vedo motivo di soffermarmi sui dettagli, è tutto descritto in modo abbastanza dettagliato su internet.

Conclusioni

Sono contento di aver preso in carico questo compito. È stata la mia prima esperienza nello sviluppo di un bot, e sono felice di aver acquisito nuove conoscenze su C# e sul lavoro con Linux.

Link al server Discord. Per coloro che giocano ai giochi di Wargaming.
Link al repository dove si trova il bot di Discord.
Link al repository DSharpPlus.
Grazie per l'attenzione!

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster