
Salut Khabrovites!
Astăzi veți vedea un articol care vă va arăta cum să creați un bot folosind C# pe .NET Core și cum să-l rulați pe un server la distanță.
Articolul va consta dintr-un fundal, o etapă pregătitoare, scrierea logicii și transferul botului pe un server la distanță.
Sper că acest articol va ajuta mulți începători.
preistorie
Totul a început într-o noapte nedorită de toamnă pe care am petrecut-o pe serverul Discord. De când m-am alăturat lui recent, am început să-l studiez în sus și în jos. După ce am găsit canalul de text „Locuri vacante”, m-am interesat, l-am deschis și am găsit printre ofertele care nu mă interesează, acestea sunt:
„Programator (dezvoltator de bot)
Cerinte:
- cunoasterea limbajelor de programare;
- capacitatea de autoinvatare.
Пожелания:
- capacitatea de a înțelege codul altor persoane;
- cunoștințe despre funcționalitatea DISCORD.
obiective:
- dezvoltare bot;
- suport și întreținere a botului.
Beneficiul dvs.:
- Oportunitatea de a susține și influența proiectul care îți place;
- Dobândirea experienței de lucru în echipă;
- Oportunitatea de a demonstra și îmbunătăți abilitățile existente.
Acest lucru m-a interesat imediat. Da, nu au plătit pentru această lucrare, dar nu ți-au cerut nicio obligație și nu va fi de prisos în portofoliu. Prin urmare, i-am scris administratorului serverului și mi-a cerut să scriu un bot care să arate statisticile jucătorului în World of Tanks.
Etapa pregătitoare

Discrod
Înainte de a începe să scriem botul nostru, trebuie să-l creăm pentru Discord. Ai nevoie:
- Conectați-vă la contul Discord
- În fila „Aplicații”, faceți clic pe butonul „Aplicație nouă” și denumiți botul
- Obțineți un token bot conectându-vă la bot și găsind fila „Bot” în lista „Setări”
- Salvați jetonul undeva
Wargaming
De asemenea, trebuie să creați o aplicație în Wargaming pentru a obține acces la API-ul Wargaming. Și aici totul este simplu:
- Conectați-vă la contul dvs. Wargaming
- Mergem la „Aplicațiile mele” și facem clic pe butonul „Adăugați o nouă aplicație”, dând numele aplicației și selectând tipul acesteia
- Salvarea ID-ului aplicației
Software
Există deja libertate de alegere. Cineva folosește Visual Studio, cineva Rider, cineva este în general puternic și scrie cod în Vim (la urma urmei, programatorii adevărați folosesc doar tastatura, nu?). Cu toate acestea, pentru a nu implementa API-ul Discord, puteți utiliza biblioteca neoficială C# „DSharpPlus”. Îl puteți instala fie din NuGet, fie creând singur sursele din depozit.
Pentru cei care nu știu sau au uitat cum să instaleze aplicații din NuGet.Instrucțiuni pentru Visual Studio
- Accesați fila Proiect - Gestionați pachetele NuGet;
- Faceți clic pe recenzie și în câmpul de căutare introduceți „DSharpPlus”;
- Selectați și instalați cadrul;
- PROFIT!
Etapa pregătitoare s-a încheiat, puteți trece la scrierea botului.
Logica de scriere

Nu vom lua în considerare întreaga logică a aplicației, voi arăta doar cum să lucrați cu interceptarea mesajelor de către bot și cum să lucrați cu API-ul Wargaming.
Lucrul cu botul Discord are loc prin sarcina asincronă static MainTask(string[] args);
Pentru a apela această funcție, în Main trebuie să vă înregistrați
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Apoi, trebuie să vă inițializați botul:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Unde simbolul este simbolul botului tău.
Apoi, prin lambda, scriem comenzile necesare pe care botul ar trebui să le execute:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Unde e.Author.Username primește porecla utilizatorului.
În acest fel, atunci când trimiteți orice mesaj care începe cu &, botul vă va saluta.
La sfârșitul acestei funcții, trebuie să scrieți await discord.ConnectAsync(); și așteptați Task.Delay(-1);
Acest lucru vă va permite să executați comenzi în fundal fără a ocupa firul principal.
Acum trebuie să ne ocupăm de API-ul Wargaming. Totul este simplu aici - scrieți cereri CURL, obțineți un răspuns sub forma unui șir JSON, scoateți datele necesare de acolo și efectuați manipulări asupra lor.
Un exemplu de lucru cu 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;
}
Atenţie! Nu este strict recomandat să stocați toate jetoanele și ID-urile aplicației în text clar! Cel puțin, Discord interzice astfel de jetoane atunci când intră în rețeaua mondială și, la maximum, botul începe să fie folosit de atacatori.
Implementați pe VPS - server

Odată ce ați terminat cu botul, acesta trebuie să fie găzduit pe un server care rulează constant 24/7. Acest lucru se datorează faptului că atunci când aplicația dvs. rulează, botul rulează și el. De îndată ce închideți aplicația, botul dvs. adoarme și el.
Много VPS серверов существует на этом свете, как на Windowsși pe Linux, однако в большинстве случаев, на Linux в разы дешевле размещать.
На Discord – сервере мне посоветовали vscale.io, и я тут же создал на нем виртуальный сервер на Ubuntu и залил бота. Я не буду описывать, как работает данный сайт, а сразу перейду к настройки бота.
În primul rând, trebuie să instalați software-ul necesar care va rula botul nostru scris în .NET Core. .
Apoi, trebuie să încărcați botul într-un serviciu Git, cum ar fi GitHub și altele asemenea, și să îl clonați pe un server VPS sau să descărcați botul în alte moduri. Vă rugăm să rețineți că veți avea doar o consolă, fără GUI. Deloc.
După ce ați descărcat botul, trebuie să îl rulați. Pentru aceasta ai nevoie de:
- Restaurați toate dependențele: restaurare dotnet
- Creați aplicația: dotnet build name_project.sln -c Release
- Accesați DLL-ul construit;
- dotnet name_of_file.dll
Felicitări! Botul tău rulează. Cu toate acestea, botul, din păcate, ocupă consola și nu este ușor să ieși din serverul VPS. De asemenea, în cazul unei reporniri a serverului, va trebui să porniți botul într-un mod nou. Există câteva căi de ieșire din situație. Toate sunt legate de lansarea la pornirea serverului:
- Adăugați scriptul de rulare în /etc/init.d
- Creați un serviciu care va rula la pornire.
Nu văd rostul să mă oprim asupra lor în detaliu, totul este descris suficient de detaliat pe Internet.
Constatări
Я рад, что я взялся за это задание. Это был мой первый опыт разработки бота, и рад, что получил новые знания по C#, и работе с Linux.
Link la serverul Discord.
Vă mulțumim pentru atenție!
Sursa: www.habr.com
