
Përshëndetje, Habrovchanë!
Sot do të njiheni me një artikull, në të cilin do të flitet për mënyrën se si të krijoni një bot, duke përdorur C# në .NET Core, dhe se si ta vendosni atë në një server të jashtëm.
Artikulli do të përbëhet nga një histori të shkuarës, një fazë përgatitore, shkruajta e logjikës dhe transferimi i botit në serverin e jashtëm.
Shpresoj se ky artikull do të ndihmojë shumë fillestarë.
Pas historia
I gjithë kjo filloi një natë pa gjumë vjeshtor, që e kalova në serverin Discord. Ndërsa sapo isha bashkuar dhe po e shikoja atë në detaje, zbulova kanalin tekstual "Vakansat" dhe u interesova, e hap atë, dhe mes ofertave që nuk më interesonin, gjetëm këtë:
"Programues (zhvillues i botëve)"
Kërkesat:
- dije të gjuhëve të programimit;
- aftësi për të mësuar vetë.
Dëshira:
- aftësi për të kuptuar kodin e të tjerëve;
- njohuri mbi funksionalitetin e DISCORD.
Detyrat:
- zhvillimi i botit;
- mbështetje dhe shoqërim të punës së botit.
Përfitimi juaj:
- Mundësia për të mbështetur dhe ndikuar në një projekt që ju pëlqen;
- Fitimi i përvojës në punën në ekip;
- Mundësia për të demonstruar dhe përmirësuar aftësitë ekzistuese.
Kjo më interesoi menjëherë. Po, për këtë punë nuk u pagua, por nuk kishte kërkesa prej teje, madje do të ishte një plus në portofolin tim. Prandaj, i shkrova administratorit të serverit, dhe ai më kërkoi të krijoja një bot që do të tregonte statistikën e lojtarit në World of Tanks.
Faza përgatitore

Discrod
Para se të filloni shkrimin e botit tonë, duhet ta krijoni atë për Discord. Ju nevojitet:
- Të hyni në llogarinë tuaj Discord
- Në skedën "Applications" klikoni në butonin "New Application" dhe emërtoni botin
- Merrni token-in e botit, duke hyrë në botin tuaj dhe duke gjetur në listën "Settings" skedën "Bot"
- Ruani diku token-in
Wargaming
Po ashtu, duhet të krijoni një aplikacion në Wargaming për të pasur qasje në API-në e Wargaming. Këtu gjithashtu është e thjeshtë:
- Hyni në llogarinë tuaj Wargaming
- Hyni në "Aplikacionet e mia" dhe klikoni në butonin "Shto aplikacion të ri", jepni emrin e aplikacionit dhe zgjidhni tipin e tij
- Ruani ID-në e aplikacionit
Softueri
KĂ«tu ka liri zgjedhjeje. Disa pĂ«rdorin Visual Studio, disa Rider, dhe disa madje shkruajnĂ« kod nĂ« Vim (nĂ« fund tĂ« fundit, programuesit e vĂ«rtetĂ« pĂ«rdorin vetĂ«m tastierĂ«n, apo jo?). MegjithatĂ«, pĂ«r tĂ« mos implementuar Discord API, mund tĂ« pĂ«rdorni njĂ« bibliotekĂ« jozyrtare pĂ«r C# âDSharpPlusâ. Mund ta instaloni ose nga NuGet, ose duke e ndĂ«rtuar vetĂ« nga burimet nĂ« depo.
Për ata që nuk e dinë, ose e kanë harruar, si të instaloni aplikacione nga NuGet.Udhëzimi për Visual Studio
- Shkoni te seksioni Projekt â Menaxhimi i paketave NuGet;
- Klikoni mbi shikimin dhe nĂ« fushĂ«n e kĂ«rkimit shkruani âDSharpPlusâ;
- Zgjidhni dhe instaloni framework-un;
- PROFIT!
Faza përgatitore ka përfunduar, mund të kaloni në shkruhjen e botit.
Shkruajtja e logjikës

Nuk do të shqyrtojmë të gjithë logjikën e aplikacionit, do të tregoj vetëm se si të punoni me kapjen e mesazheve nga boti, dhe si të punoni me Wargaming API.
Puna me botin e Discord bëhet përmes funksionit static async Task MainTask(string[] args);
Për të thirrur këtë funksion, në Main duhet të shkruani
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Më pas, ju duhet të inicializoni botin tuaj:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Ku i token â Ă«shtĂ« token-i i botit tuaj.
Më pas, përmes një lambda, shkruani komandat e nevojshme që duhet të ekzekutojë boti:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync("Hello, " + e.Author.Username);
}
};
Ku e.Author.Username â merrni nick-nemin e pĂ«rdoruesit.
Kështu, kur të dërgoni çdo mesazh që fillon me &, boti do t'ju përshëndesë.
Në fund të kësaj funksioni, duhet të shkruani await discord.ConnectAsync(); dhe await Task.Delay(-1);
Kjo do t'i lejojë të ekzekutojë komandat në sfond, pa zënë shkallën kryesore.
Tani Ă«shtĂ« e nevojshme tĂ« merret me Wargaming API. KĂ«tu Ă«shtĂ« e thjeshtĂ« â shkruani kĂ«rkesa CURL, merrni njĂ« pĂ«rgjigje nĂ« formĂ« JSON â vargje, nxirrni tĂ« dhĂ«nat e nevojshme dhe bĂ«ni manipulime mbi to.
Shembulli i punës me 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("Lojtari nuk u gjet");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Kërkesa kërkon të paktën tre shkronja");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Kërkimi është i pavlefshëm");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Emri është bosh");
}
else
{
throw new Exception("Diçka shkoi keq.");
}
}
return player;
}
Kujdes! Ruajtja e tĂ« gjitha tokeneve dhe ID-ve tĂ« aplikacioneve nĂ« mĂ«nyrĂ« tĂ« hapur nuk rekomandohet kurrsesi! Si tĂ« paktĂ«n â Discord ndalon kĂ«to tokene kur ato bien nĂ« rrjetin botĂ«ror, si maksimum â boti fillon tĂ« pĂ«rdoret nga keqbĂ«rĂ«sit.
Deploy nĂ« VPS â server

Pasi të keni përfunduar me botin, duhet ta vendosni në një server që funksionon 24/7. Kjo është për shkak se kur aplikacioni juaj funksionon, boti gjithashtu funksionon. Sapo të fikni aplikacionin, boti juaj gjithashtu fle.
Ka shumë serverë VPS në këtë botë, si në Windows ashtu edhe në Linux, por në shumicën e rasteve, është shumë më lirë të vendosni në Linux.
Në serverin Discord më rekomanduan vscale.io, dhe menjëherë krijova atje një server virtual në Ubuntu dhe ngarkova botin. Nuk do të përshkruaj se si funksionon ky website, por do të kaloj direkt në konfigurimin e botit.
E para, ju nevojitet tĂ« instaloni softin e nevojshĂ«m qĂ« do tĂ« запŃŃĐșа naĆĄ boti, i shkruar nĂ« .NET Core. .
MĂ« pas, ju nevojitet tĂ« ngarkoni robotin nĂ« Git â njĂ« shĂ«rbim si GitHub dhe tĂ« ngjashme dhe tĂ« klononi nĂ« VPS â serverin, ose, me rrugĂ« tĂ« tjera tĂ« shkarkoni robotin tuaj. Mbani mend se do tĂ« keni vetĂ«m konzolĂ«, GUI nuk do tĂ« jetĂ« i pranishĂ«m. Aspak.
Pas shkarkimit të robotit tuaj, ju nevojitet ta nisni atë. Për këtë, ju nevojitet:
- Të riktheheni të gjitha varësitë: dotnet restore
- Të ndërtoni aplikacionin: dotnet build name_project.sln -c Release
- Të kaloni në DLL-në e ndërtuar;
- dotnet name_of_file.dll
Urime! Robotin tuaj Ă«shtĂ« nisur. MegjithatĂ«, robotin fatkeqĂ«sisht e zĂ« konzola, dhe tĂ« dalĂ«sh nga VPS â serveri nuk do tĂ« jetĂ« aq e lehtĂ«. Po ashtu, nĂ« rast rikthimi tĂ« serverit, do tĂ« duhet ta nisni pĂ«rsĂ«ri robotin. KĂ«tu ka disa zgjidhje. TĂ« gjitha lidhen me nisjen gjatĂ« fillimit tĂ« serverit:
- Shto nisjen e skriptit në /etc/init.d
- Krijo një shërbim, i cili do të nisë gjatë fillimit.
Nuk e shoh të nevojshme të qëndroj shumë mbi to, është përshkruar mjaft detajisht në internet.
Përfundimet
Jam i lumtur që kam marrë këtë detyrë. Ishte eksperienca ime e parë në zhvillimin e një roboti dhe jam i lumtur që kam fituar njohuri të reja mbi C# dhe punën me Linux.
Linku në serverin Discord.
Faleminderit për vëmendjen!
Burimi: habr.com
