
Përshëndetje, Habrvchanë!
Sot do të njihemi me një artikull, ku do të diskutohet se si të krijoni një bot, duke përdorur C# në .NET Core, dhe si ta vendosni atë në një server të dedikuar.
Artikulli do të përbëhet nga një histori përgatitore, faza përgatitore, shkrimi i logjikës dhe transferimi i botit në serverin e dedikuar.
Shpresoj se ky artikull do të ndihmojë shumë të sapo filluar.
Historia e mëparshme
E gjithë filloi në një natë pa gjumë vjeshte, të cilën e kalova në serverin Discord. Duke qenë se sapo isha bashkuar, fillova ta studioj atë thellësisht. Duke zbuluar kanalin e teksteve "Punësimet", u interesova, e hapëm atë dhe gjeta mes ofertave që nuk më interesonin, këtë:
«Programues (zhvillues boti)"
Kërkesat:
- njohuri në gjuhët e programimit;
- aftësi për vetë-mësim.
Dëshira:
- aftësi për të kuptuar kodin e të tjerëve;
- njohuri të funksionit të DISCORD.
Detyrat:
- zhvillimi i botit;
- mbështetje dhe shoqërim i punës së botit.
Përfitimi juaj:
- Mundësia për të mbështetur dhe ndikuar në projektin që ju ka pëlqyer;
- Marrja e përvojës në punë ekipore;
- Mundësia për të treguar dhe përmirësuar aftësitë ekzistuese.»
Kjo më interesoi menjëherë. Po, për këtë punë nuk paguhej, por nuk kishte asnjë detyrim ndaj teje, dhe gjithashtu në portofol nuk do të ishte e tepërt. Prandaj, i shkrova administratorit të serverit dhe ai më kërkoi të shkruaja një bot që do të tregonte statistikën e lojtarit në World of Tanks.
Faza përgatitore

Discord
Para se të filloni të shkruani botin tonë, duhet ta krijoni atë për Discord. Ju nevojitet:
- Të hyni në llogarinë tuaj të Discord
- Në skedën "Aplikacionet" kliko në butonin "Aplikacion i ri" dhe emërto boti
- Merrni token e botit, duke hyrë në botin tuaj dhe duke gjetur në listën "Cilësimet" skedën "Bot"
- Ruani ndonjëherë token
Wargaming
Gjithashtu, duhet të krijoni një aplikacion në Wargaming, për të marrë qasje në API Wargaming. Këtu gjithashtu është shumë e thjeshtë:
- Hyni në llogarinë Wargaming
- Hyni në "Aplikacionet e mia" dhe klikoni në butonin "Shto një aplikacion të ri", jepni emrin e aplikacionit dhe zgjidhni llojin e tij
- Ruani ID e aplikacionit
Software
Këtu tashmë ka liri zgjedhjeje. Disa përdorin Visual Studio, disa Rider, disa madje janë të avancuar dhe shkruajnë kod në Vim (për fat të keq, programuesit e vërtetë përdorin vetëm tastierën, apo jo?). Megjithatë, për të mos realizuar API-në e Discord, mund të përdorni një bibliotekë jozyrtare për C# "DSharpPlus". E mund ta instaloni ose nga NuGet, ose duke ndërtuar vetë burimet nga repository.
Për ata që nuk e dinë, ose e kanë harruar, si të instalojnë aplikacione nga NuGet.Udhëzimi për Visual Studio
- Shkoni te skeda Projekt â Menaxhimi i paketave NuGet;
- Klikoni në shikimin e paketave dhe në fushën e kërkimit shkruani "DSharpPlus";
- Zgjidhni dhe instaloni framework-un;
- PROFIT!
Faza përgatitore ka përfunduar, tani mund të kaloni në shkrimin e bot-it.
Shkrimi i logjikës

Nuk do ta shqyrtojmë të gjithë logjikën e aplikacionit, do të tregoj vetëm si të punoni me kapjen e mesazheve nga boti, dhe si të punoni me Wargaming API.
Puna me bot-in e Discord-it ndodh 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 bot-in tuaj:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Ku token është token-i i bot-it tuaj.
Pastaj, përmes një lambde, shkruani komandat e nevojshme që boti duhet të kryejë:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync("Përshëndetje, " + e.Author.Username);
}
};
Ku e.Author.Username është marrja e pseudonimit të 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ë lejojë ekzekutimin e komandave në sfond, pa zënë rrjedhën kryesore.
Tani duhet tĂ« merremi me Wargaming API. KĂ«tu Ă«shtĂ« e thjeshtĂ« â shkruani kĂ«rkesat CURL, merrni pĂ«rgjigje nĂ« formĂ«n e njĂ« JSON-i â varg, nxjerrni 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ërkohet të paktën tre simbole");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Kërkimi i pavlefshëm");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Emri i zbrazët");
}
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. Të paktën - Discord i ndalon këto tokene kur ato bien në internet, në maksimum - boti fillon të përdoret nga keqbërësit.
Deploy nĂ« VPS â server

Pas përfundimit me botin, është e nevojshme ta vendosni atë në një server që punon vazhdimisht 24/7. Kjo lidhet me faktin se kur aplikacioni juaj punon, boti gjithashtu punon. Sa herë që e ndizni aplikacionin, boti juaj bie në gjumë.
Ka shumë VPS serverë në këtë botë, si në Windows ashtu edhe në Linux, megjithatë, në shumicën e rasteve, është në shumë raste më e lirë ta vendosni në Linux.
NĂ« serverin Discord, mĂ« rekomanduan vscale.io, dhe unĂ« menjĂ«herĂ« krijova atje njĂ« server virtual nĂ« Ubuntu dhe ngarkova botin. Nuk do tĂ« pĂ«rshkruaj si funksionon ky ŃаĐčŃ, por do tĂ« kaloj drejtpĂ«rdrejt nĂ« konfigurimin e botit.
Së pari, ju nevojitet të instaloni softin e nevojshëm që do të ekzekutojë botin tonë, i shkruar në .NET Core. .
Më pas, ju nevojitet të ngarkoni botin në Git - një shërbim, si GitHub dhe të ngjashme dhe ta kloni në serverin VPS - ose, në mënyra të tjera, ta shkarkoni botin tuaj. Mbani parasysh se do të keni vetëm konsolë, GUI nuk do të jetë. Plotesisht.
Pasi keni shkarkuar bota tuaj, duhet ta aktivizoni atë. Për këtë, ju nevojitet:
- Rivendosni të gjitha varësitë: dotnet restore
- Ndërtoni aplikacionin: dotnet build name_project.sln -c Release
- Shkoni te DLL e ndërtuar;
- dotnet name_of_file.dll
Urime! Bota juaj Ă«shtĂ« aktivizuar. MegjithatĂ«, t'i dĂ«rgoni komandĂ«s dhe tĂ« dilni nga VPS â serveri nuk Ă«shtĂ« kaq e lehtĂ«. Po ashtu, nĂ« rast se serveri ribĂ«het, do tĂ« duhet ta aktivizoni pĂ«rsĂ«ri botĂ«n. Ka disa zgjidhje pĂ«r kĂ«tĂ« situatĂ«. TĂ« gjitha lidhen me aktivizimin gjatĂ« nisjes sĂ« serverit:
- Shtoni aktivizimin e skenarit në /etc/init.d
- Krijoni një shërbim që do të aktivizohet gjatë nisjes.
Nuk e shoh të nevojshme të ndalem shumë te to, janë përshkruar mjaft mirë në internet.
Përfundimet
Jam i lumtur që e mora këtë detyrë. Ky ishte përvoja ime e parë në zhvillimin e një boti dhe jam i lumtur që fitova njohuri të reja mbi C# dhe punën me Linux.
Linku për serverin e Discord.
Faleminderit për vëmendjen!
Burimi: habr.com
