Tuttu hà cuminciatu in una notte di vaghjimu senza dorme chì aghju passatu nantu à u servitore Discord. Dapoi l'aghju unitu à ellu, aghju cuminciatu à studià ellu è falà. Dopu avè truvatu u canali di testu "Vacanti", aghju avutu interessatu, l'aghju apertu, è truvaru trà l'offerte chì ùn m'interessanu micca, questi sò:
"Programmatore (sviluppatore di bot) Rèducts:
cunniscenza di linguaggi di prugrammazione;
capacità per l'autoapprendimentu.
Auguri:
capacità di capisce u codice di l'altri;
cunniscenza di a funziunalità DISCORD.
Scopi:
sviluppu di u bot;
supportu è mantenimentu di u bot.
U vostru benefiziu:
Opportunità di sustene è influenzà u prughjettu chì ti piace;
Avè sperienza di travaglià in una squadra;
Opportunità di dimustrà è migliurà e cumpetenze esistenti.
Questu m'hà interessatu immediatamente. Iè, ùn anu micca pagatu per questu travagliu, ma ùn anu micca dumandatu alcuna obligazione da voi, è ùn serà micca superfluu in a cartera. Dunque, aghju scrittu à l'amministratore di u servitore, è m'hà dumandatu di scrive un bot chì mostrarà e statistiche di u ghjucatore in World of Tanks.
Stage preparatoriu
Discrodu
Prima di cumincià à scrive u nostru bot, avemu bisognu di creà per Discord. Avete bisognu:
Andemu à "I mo applicazioni" è cliccate nantu à u buttone "Aggiungi una nova applicazione", dendu u nome di l'applicazione è selezziunate u so tipu.
Salvà l'ID di l'applicazione
Software
Ci hè digià a libertà di scelta. Qualchissia usa Visual Studio, qualcunu Rider, qualcunu hè in generale putente, è scrive codice in Vim (dopu à tuttu, i veri programatori utilizanu solu u teclatu, nò?). Tuttavia, per ùn implementà l'API Discord, pudete aduprà a libreria C# non ufficiale "DSharpPlus". Pudete installà sia da NuGet, sia custruendu e fonti stessu da u repository.
Per quelli chì ùn sanu micca o anu scurdatu cumu installà applicazioni da NuGet.Istruzzioni per Visual Studio
Andà à a tabulazione Prughjettu - Manage NuGet Packages;
Cliccate nantu à a rivista è in u campu di ricerca entre in "DSharpPlus";
Selezziunà è stallà framework;
Prufittu!
U stadiu preparatoriu hè finitu, pudete passà à scrive u bot.
A logica di scrittura
Ùn cunsideremu micca tutta a logica di l'applicazione, vi mustrarà solu cumu travaglià cù l'intercepzione di i missaghji da u bot, è cumu travaglià cù l'API Wargaming.
U travagliu cù u bot Discord si faci per mezu di u static Async Task MainTask (string[] args);
Per chjamà sta funzione, in Main avete bisognu di registrà
Induve u token hè u token di u vostru bot.
Allora, attraversu u lambda, scrivimu i cumandamenti necessarii chì u bot deve eseguisce:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Induve e.Author.Username riceve u nickname di l'utilizatore.
In sta manera, quandu vi mandate ogni missaghju chì principia cù &, u bot vi salutarà.
À a fine di sta funzione, deve scrive await discord.ConnectAsync (); è aspittà Task.Delay (-1);
Questu permetterà di eseguisce cumandamenti in u fondu senza piglià u filu principale.
Avà avemu bisognu di trattà cù l'API Wargaming. Tuttu hè simplice quì - scrivite e dumande CURL, uttene una risposta in forma di una stringa JSON, caccià e dati necessarii da quì è eseguite manipulazioni nantu à elli.
Un esempiu di travaglià cù 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("Игрок не найден");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Минимум три символа требуется");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Неверный поиск");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Пустой никнейм");
}
else
{
throw new Exception("Something went wrong.");
}
}
return player;
}
Attenzione ! Ùn hè strettamente cunsigliatu di almacenà tutti i tokens è l'ID di l'applicazione in testu chjaru! À u minimu, Discord pruibisce tali tokens quandu entranu in a reta mundiale, è à u massimu, u bot principia à esse utilizatu da l'attaccanti.
Implementa à VPS - server
Una volta chì avete finitu cù u bot, deve esse allughjatu in un servitore chì hè sempre in esecuzione 24/7. Questu hè duvuta à u fattu chì quandu a vostra applicazione hè in esecuzione, u bot hè ancu in esecuzione. Appena spegne l'applicazione, u vostru bot si addormenta ancu.
Parechji servitori VPS esistenu in questu mondu, sia in Windows sia in Linux, in ogni modu, in a maiò parte di i casi, hè assai più prezzu per ospitu in Linux.
Nant'à u servitore di Discord, mi sò cunsigliatu vscale.io, è aghju subitu creatu un servitore virtuale nantu à Ubuntu nantu à ellu è hà caricatu u bot. Ùn scriveraghju micca cumu funziona stu situ, ma andaraghju direttamente à i paràmetri di u bot.
Prima di tuttu, avete bisognu di stallà u software necessariu chì eseguirà u nostru bot scrittu in .NET Core. Cumu fà hè descrittu quì.
In seguitu, avete bisognu di cullà u bot à un serviziu Git, cum'è GitHub è simili, è clone à un servitore VPS, o scaricate u vostru bot in altri modi. Per piacè nutate chì avete solu una cunsola, senza GUI. Per nunda.
Dopu avè scaricatu u vostru bot, avete bisognu di eseguisce. Per questu, avete bisognu:
Ripristina tutte e dipendenze: restaurazione dotnet
Felicitazioni ! U vostru bot hè in esecuzione. In ogni casu, u bot, sfurtunatamenti, occupa a cunsola, è ùn hè micca faciule per esce da u servitore VPS. Inoltre, in casu di riavvia di u servitore, avete da inizià u bot in una nova manera. Ci hè un paru di manere fora di a situazione. Tutti sò ligati à u lanciamentu à l'iniziu di u servitore:
Aghjunghjite u script run à /etc/init.d
Crea un serviziu chì currerà à l'iniziu.
Ùn vecu micca u puntu di abità nantu à elli in dettu, tuttu hè descrittu in abbastanza dettagliu in Internet.
scuperti
Sò cuntentu chì aghju pigliatu questu incarichi. Questa era a mo prima sperienza di sviluppu di bot, è sò cuntentu chì aghju avutu una nova cunniscenza in C #, è travaglià cù Linux.