
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

Discord
Prima di iniziare a scrivere il nostro bot, è necessario crearlo per Discord. Devi:
- Accedere al tuo account Discord
- Nella scheda "Applications" cliccare sul pulsante "New Application" e dare un nome al bot
- Ottenere il token del bot, accedendo al tuo bot e trovando nella lista la scheda "Bot" sotto "Settings"
- 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:
- Accedere al tuo account Wargaming
- Entrare in "Le mie applicazioni" e cliccare sul pulsante "Aggiungi nuova applicazione", dando un nome all'applicazione e scegliendone il tipo
- 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
- Andiamo alla scheda Progetto – Gestione pacchetti NuGet;
- Clicchiamo su esplora e inseriamo “DSharpPlus” nel campo di ricerca;
- Selezioniamo e installiamo il framework;
- PROFIT!
La fase preparatoria è terminata, possiamo passare alla scrittura del bot.
Scrittura della logica

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

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. .
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.
Grazie per l'attenzione!
Fonte: habr.com
