
Ciao, Habrichiani!
Oggi vi immergerete in un articolo che spiega come creare un bot utilizzando C# su .NET Core e come deployarlo su un server remoto.
L'articolo consisterà in una introduzione, una fase preparatoria, lo sviluppo della logica e il trasferimento del bot su un server remoto.
Spero che questo articolo possa aiutare molti principianti.
Contesto
Tutto è iniziato in una notte insonne d'autunno che ho trascorso su un server Discord. Poiché mi ero unito da poco, ho iniziato a esplorarlo a fondo. Scoprendo il canale testuale 'Lavori', sono rimasto interessato, l'ho aperto e ho trovato, tra le offerte non mi interessavano, questa:
«Programmatore (sviluppatore di bot)
Requisiti:
- conoscenza dei linguaggi di programmazione;
- capacità di autoapprendimento.
Requisiti:
- capacità di comprendere il codice di altri;
- conoscenza delle funzionalità di DISCORD.
Compiti:
- sviluppo del bot;
- supporto e manutenzione del bot.
Vantaggi per voi:
- Possibilità di supportare e influenzare un progetto che vi interessa;
- Acquisizione di esperienza lavorando in squadra;
- Possibilità di dimostrare e migliorare le vostre abilità.»
Questo mi ha subito interessato. Sì, non sono stati pagati per questo lavoro, ma non ti sono stati richiesti obblighi e non sarà superfluo nel portfolio. Così ho scritto all'amministratore del server, e mi ha chiesto di scrivere un bot che mostrasse le statistiche del giocatore in World of Tanks.
Fase di preparazione

Discrod
Prima di iniziare a scrivere il nostro bot, è necessario crearlo per Discord. Devi:
- Accedere all'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 'Settings' sotto 'Bot'
- Salvare il token da qualche parte
Wargaming
Inoltre, è necessario creare un'applicazione in Wargaming per accedere all'API di Wargaming. Anche qui è molto semplice:
- Accedere all'account Wargaming
- Andare su 'Le mie applicazioni' e cliccare sul pulsante 'Aggiungi nuova applicazione', dando un nome all'applicazione e scegliendo il suo tipo
- Salvare l'ID dell'applicazione
Software
Qui c'è già libertà di scelta. Alcuni usano Visual Studio, altri Rider, e c'è chi scrive codice in Vim (dopotutto, i veri programmatori usano solo la tastiera, giusto?). Tuttavia, per non implementare l'API di Discord, è possibile utilizzare una libreria non ufficiale per C# chiamata “DSharpPlus”. Può essere installata tramite NuGet o compilando personalmente 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 – Gestisci pacchetti NuGet;
- Clicchiamo su Esplora e nel campo di ricerca inseriamo “DSharpPlus”;
- Selezioniamo e installiamo il framework;
- PROFIT!
La fase preparatoria è terminata, possiamo procedere alla scrittura del bot.
Scrittura della logica

Non esamineremo tutta la logica dell’applicazione, mostrerò solo come gestire l'intercettazione dei messaggi da parte del bot e come interagire con l’API di Wargaming.
Il funzionamento del bot Discord avviene attraverso la funzione static async Task MainTask(string[] args);
Per chiamare questa funzione, in Main è necessario scrivere
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.
Successivamente, attraverso una lambda, definiamo 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 è usato per ottenere il nickname dell'utente.
In questo modo, quando invierai un messaggio che inizia con &, il bot ti saluterà.
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 è necessario comprendere l'API di Wargaming. Qui è semplice: scrivi richieste CURL, ricevi risposte in formato JSON, estrai i dati necessari e manipola su di essi.
Esempio di lavoro con WargamingAPI
public Player FindPlayer(string searchNickname)
{
//https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
Player player = null;
string resultResponse = GetResponse(urlRequest);
dynamic parsed = JsonConvert.DeserializeObject(resultResponse);
string status = parsed.status;
if (status == "ok")
{
int count = parsed.meta.count;
if (count > 0)
{
player = new Player
{
Nickname = parsed.data[0].nickname,
Id = parsed.data[0].account_id
};
}
else
{
throw new PlayerNotFound("Giocatore non trovato");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Sono richiesti almeno tre caratteri");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Ricerca non valida");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Nickname vuoto");
}
else
{
throw new Exception("Qualcosa è andato storto.");
}
}
return player;
}
Attenzione! È fortemente sconsigliato conservare i token e gli ID delle applicazioni in chiaro! Almeno – Discord banna tali token quando vengono esposti al pubblico, al massimo – i malintenzionati iniziano ad usarli.
Deploy su VPS – server

Dopo aver terminato con il bot, è necessario ospitarlo su un server che funzioni 24/7. Questo è importante perché quando la tua applicazione è attiva, lo è anche il bot. Non appena spegni l'applicazione, il tuo bot va in letargo.
Esistono molti server VPS nel mondo, sia su Windows che su Linux, ma nella maggior parte dei casi, è notevolmente più economico ospitare su Linux.
Nel server Discord mi hanno consigliato vscale.io, e ho subito creato un server virtuale su Ubuntu e ho caricato il bot. Non descriverò come funziona questo sito, ma passerò direttamente alla configurazione del bot.
Innanzitutto, è necessario installare il software necessario che eseguirà il nostro bot, scritto in .NET Core. .
In seguito, dovrai caricare il bot su Git, un servizio simile a GitHub e simili, e clonarlo su un server VPS, oppure scaricarlo in altri modi. Tieni presente che avrai solo la console, non ci sarà un'interfaccia grafica.
Dopo aver scaricato il tuo bot, dovrai avviarlo. Per fare ciò, devi:
- Ripristinare tutte le dipendenze: dotnet restore
- Compilare l'applicazione: dotnet build name_project.sln -c Release
- Passare al file DLL compilato;
- dotnet name_of_file.dll
Congratulazioni! Il tuo bot è in esecuzione. Tuttavia, il bot, sfortunatamente, occupa la console, e uscire dal server VPS non sarà così semplice. Inoltre, in caso di riavvio del server, dovrai riavviare il bot. Qui ci sono un paio di soluzioni a questo problema. Tutte riguardano l'avvio al riavvio del server:
- Aggiungere l'avvio dello script in /etc/init.d
- Creare un servizio che si avvii all'avvio.
Non vedo motivo di soffermarmi su di essi, tutto è stato descritto abbastanza dettagliatamente su Internet.
Conclusioni
Sono felice di aver preso questo incarico. Questa è stata la mia prima esperienza di sviluppo di un bot, e sono contento di aver acquisito nuove conoscenze su C# e sul lavoro con Linux.
Link al server Discord.
Grazie per l'attenzione!
Fonte: habr.com
