
Tere, Habravlased!
TÀna saate tutvuda artikliga, kus rÀÀgitakse, kuidas luua boti, kasutades C#-t .NET Core'is, ja kuidas see kÀivitada kaugarvutil.
Artikkel koosneb eelloost, ettevalmistusfaasist, loogika kirjutamisest ja boti ĂŒleviimisest kaugarvutile.
Loodan, et see artikkel aitab paljusid algajaid.
Eelalugu
KĂ”ik algas ĂŒhel unetul sĂŒgisĂ”htul, mille veetsin Discordi serveris. Kuna ma olin seal suhteliselt uus, hakkasin seda kĂ”ikvĂ”imalikult uurima. Leides tekstikanali âTööpakkumisedâ, tekkis mul huvi, avasin selle ja leidsin, et ĂŒks mitte huvitav pakkumine on:
âProgrammeerija (boti arendaja)
NÔuded:
- programmeerimiskeelte tundmine;
- vÔime eneseÔppimiseks.
Soovitused:
- oskus mÔista vÔÔrast koodi;
- DISCORDi funktsionaalsuse tundmine.
Ălesanded:
- boti arendamine;
- boti töö toetamine ja jÀlgimine.
Teie kasu:
- VÔimalus toetada ja mÔjutada meeldivat projekti;
- Kogemuste omandamine meeskonnas töötamisel;
- VÔimalus demonstreerida ja tÀiustada olemasolevaid oskusi."
See pani mind huvituma. Jah, selle töö eest ei makstud, kuid sinult ei nÔutud mingeid kohustusi ning see ei oleks ka portfoolios liialt. SeetÔttu kirjutasin serveriadministraatorile ning ta palus mul kirjutada boti, mis nÀitab mÀngija statistikat World of Tanks'is.
Eeltestimine

Discrod
Enne kui hakkame meie boti kirjutama, tuleb see kÔigepealt Discordis luua. Teil on vaja:
- Logida sisse oma Discordi kontole
- Vahekaardil âRakendusedâ vajutage nuppu âUus rakendusâ ja nimetage bot
- Saada boti token, sisestades oma boti ja leidke sealt kaust âSeadedâ vahekaart âBotâ
- Salvestage token kuskile
Wargaming
Samuti tuleb luua rakendus Wargamingus, et saada juurdepÀÀs Wargaming API-le. Siin on kÔik samuti lihtne:
- Logige sisse Wargamingu kontole
- Minge jaotisse âMinu rakendusedâ ja vajutage nuppu âLisa uus rakendusâ, andes rakendusele nime ja valides selle tĂŒĂŒbi
- Salvesta rakenduse ID
Tarkvara
Siin on juba vabadus valida. Keegi kasutab Visual Studio't, keegi Riderit, keegi aga tĂ”siselt voolab ja kirjutab koodi Vim'is (Ă”iged programmeerijad kasutavad ju ainult klaviatuuri, eks?). Kuid Discord API kasutamiseks, ei pea seda ise rakendama, piisab, kui kasutada mitteformaalseid C# raamatukogusid nagu âDSharpPlusâ. Selle saad installida kas NuGet'ist vĂ”i koguda ise lĂ€htekoodid repolt.
Neile, kes ei tea vÔi on unustanud, kuidas NuGet'ist rakendusi installida.Juhend Visual Studio jaoks
- Liigume vahekaardile Projekt â NuGet pakettide haldamine;
- KlĂ”psame ĂŒlevaate ja kirjutame otsinguvĂ€ljale âDSharpPlusâ;
- Valime ja installime framework'i;
- PROFIT!
Ettevalmistavad tööd on lĂ”petatud, nĂŒĂŒd vĂ”ime liikuda boti kirjutamise juurde.
Sisu kirjutamine

Me ei vaata rakenduse kogu loogikat, nĂ€itan vaid, kuidas töötada boti sĂ”numite pĂŒĂŒdmisega ja kuidas töötada Wargaming API'ga.
Discord boti töö toimub funktsiooni static async Task MainTask(string[] args); kaudu;
Selle funktsiooni vÀljakutsumiseks tuleb Main'is kirjutada
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Edasi tuleb teil oma boti initsialiseerida:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Kus token on teie boti token.
Siis, lÀbi lambda, mÀÀrame vajalikud kÀsud, mida bot peab tÀitma:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(âTere, â + e.Author.Username);
}
};
Kus e.Author.Username â kasutaja hĂŒĂŒdnime saamine.
Nii et kui saadate mis tahes sÔnumi, mis algab &, tervitab bot teid.
Selle funktsiooni lÔpus on vajalik kirjutada await discord.ConnectAsync(); ja await Task.Delay(-1);
See vÔimaldab kÀske tÀita taustal, mitte blokeerides pÔhivoogu.
NĂŒĂŒd on vajalik mĂ”ista Wargaming API-d. Siin on kĂ”ik lihtne â kirjutage CURL-pĂ€ringud, saate vastuse JSON-formaadis, tĂ”state sealt vajalikud andmed ja teete nendega manipuleerimisi.
NĂ€ide WargamingAPI kasutamisest
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("MĂ€ngija ei leitud");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("NÔutav on vÀhemalt kolm tÀhte");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Vale otsing");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("TĂŒhi hĂŒĂŒdnimi");
}
else
{
throw new Exception("Midagi lÀks valesti.");
}
}
return player;
}
TĂ€htis! KĂ”iki tokeneid ja rakenduste ID-sid ei soovitata avatud kujul hoida! KĂ”ige vĂ€hem â Discord keelab sellised tokenid, kui need satuvad ĂŒlemaailmsetesse vĂ”rkudesse, kĂ”ige hullem â bot hakkab kurjategijate kĂ€tes tegutsema.
VPS â serveri seadistamine

PĂ€rast boti seadistamist tuleb see paigutada serverisse, mis töötab pidevalt 24/7. See on seotud sellega, et kui teie rakendus töötab, töötab ka bot. Kui rakenduse vĂ€lja lĂŒlitate, uinub ka teie bot.
Selliseid VPS-servereid on maailmas palju, nii Windowsi kui ka Linuxi jaoks, kuid enamikul juhtudel on Linuxis palju odavam paigutamine.
Discordi serveris soovitati mulle vscale.io, ja ma lĂ”in seal kohe virtuaalse serveri Ubuntu sĂŒsteemis ning laadisin boti ĂŒles. Ma ei hakka kirjeldama, kuidas see sait töötab, vaid lĂ€hen kohe boti seadistamise juurde.
Esmalt peate installima vajaliku tarkvara, mis kÀivitab meie .NET Core'il kirjutatud boti. .
SeejĂ€rel peate oma boti Git-ile ĂŒles laadima â teenusele, nagu GitHub ja sarnased, ning selle VPS-serverisse kloonima vĂ”i muude meetoditega oma boti alla laadima. Pange tĂ€hele, et teil on vaid konsool, GUI-d ei ole. Ăldse.
PÀrast seda, kui olete oma boti alla laadinud, peate selle kÀivitama. Selleks peate:
- Taastama kÔik sÔltuvused: dotnet restore
- Rakenduse koostama: dotnet build name_project.sln -c Release
- Minema koostatud DLL-i;
- dotnet name_of_file.dll
Palju Ônne! Teie bot on kÀivitunud. Kahjuks kasutab bot konsooli, nii et VPS-serverist vÀljuda ei ole nii lihtne. Samuti, kui server taaskÀivitub, peate boti uuesti kÀivitama. Siin on paar lahendust. Need kÔik on seotud kÀivitamisega serveri kÀivitamisel:
- Lisage skripti kÀivitamine /etc/init.d
- Looge teenus, mis kÀivitub serveri kÀivitamisel.
Ei nÀe mÔtet nendeleetailselt peatuda, kÔik on internetis piisavalt detailselt kirjeldatud.
JĂ€reldused
Mul on hea meel, et vĂ”tsin selle ĂŒlesande ette. See oli minu esimene kogemus boti arendamisel, ja mul on hea meel, et sain uusi teadmisi C#-st ja Linuxiga töötamisest.
Link Discordi serverisse.
AitÀh tÀhelepanu eest!
Allikas: habr.com
