ProHoster > Blogi > Haldamine > Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega
Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega
Tere Khabrovites!
Täna näete artiklit, mis näitab, kuidas luua .NET Core'is C#-ga robotit ja kuidas seda kaugserveris käivitada.
Artikkel koosneb taustast, ettevalmistavast etapist, loogika kirjutamisest ja roboti ülekandmisest kaugserverisse.
Loodan, et see artikkel aitab paljusid algajaid.
eelajalugu
Kõik sai alguse ühel unetul sügisööl, mille veetsin Discordi serveris. Kuna ma hiljuti temaga liitusin, hakkasin teda üles ja alla uurima. Olles leidnud tekstikanali "Vabad töökohad", hakkasin huvi tundma, avasin selle ja leidsin pakkumiste hulgast, mis mind ei huvitanud, järgmised:
"Programmeerija (roti arendaja) nõuded:
programmeerimiskeelte tundmine;
iseõppimise võime.
Пожелания:
oskus mõista teiste inimeste koodi;
teadmised DISCORDi funktsionaalsusest.
Eesmärgid:
robotite arendamine;
boti tugi ja hooldus.
Teie eelised:
Võimalust toetada ja mõjutada endale meelepärast projekti;
Meeskonnas töötamise kogemuse omandamine;
Võimalus näidata ja täiendada olemasolevaid oskusi.
See huvitas mind kohe. Jah, nad ei maksnud selle töö eest, kuid nad ei nõudnud teilt mingeid kohustusi ja see ei lähe portfellis üleliigseks. Seetõttu kirjutasin serveri administraatorile ja ta palus mul kirjutada bot, mis näitab mängija statistikat World of Tanksis.
Ettevalmistav etapp
Discrod
Enne kui hakkame oma robotit kirjutama, peame selle Discordi jaoks looma. Sa vajad:
Me läheme jaotisse "Minu rakendused" ja klõpsake nuppu "Lisa uus rakendus", andes rakenduse nime ja valides selle tüübi.
Rakenduse ID salvestamine
tarkvara
Valikuvabadus on juba olemas. Keegi kasutab Visual Studiot, keegi Riderit, keegi on üldiselt võimas ja kirjutab Vimis koodi (kasutavad ju tõelised programmeerijad ainult klaviatuuri, eks?). Kuid selleks, et mitte rakendada Discord API-d, võite kasutada mitteametlikku C# teeki "DSharpPlus". Saate selle installida kas NuGetist või koostades allikad ise hoidlast.
Neile, kes ei tea või on unustanud, kuidas NuGeti rakendusi installida.Visual Studio juhised
Minge vahekaardile Projekt - halda NuGeti pakette;
Klõpsake arvustusel ja sisestage otsinguväljale "DSharpPlus";
Valige ja installige raamistik;
KASUM!
Ettevalmistav etapp on läbi, võite jätkata roboti kirjutamist.
Kirjutamise loogika
Me ei võta arvesse kogu rakenduse loogikat, näitan ainult, kuidas töötada roboti sõnumite pealtkuulamisega ja kuidas töötada Wargaming API-ga.
Discordi robotiga töötamine toimub staatilise asünkroonimise kaudu. Task MainTask(string[] args);
Selle funktsiooni käivitamiseks peate registreerima Main
Kus on teie boti tunnus.
Seejärel kirjutame lambda kaudu vajalikud käsud, mida robot peaks täitma:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Kust e.Author.Username saab kasutaja hüüdnime.
Nii tervitab robot teid, kui saadate mis tahes sõnumi, mis algab &-ga.
Selle funktsiooni lõppu tuleb kirjutada await discord.ConnectAsync(); ja oodake Task.Delay(-1);
See võimaldab teil käivitada taustal käske ilma põhilõimi võtmata.
Nüüd peame tegelema Wargaming API-ga. Siin on kõik lihtne – kirjutage CURL-i päringuid, hankige vastus JSON-stringina, tõmmake sealt välja vajalikud andmed ja tehke nendega manipuleerimisi.
WargamingAPI-ga töötamise näide
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;
}
Tähelepanu! Kõiki märke ja rakenduste ID-sid ei ole rangelt soovitatav salvestada selge tekstina! Vähemalt keelab Discord sellised märgid, kui need sisenevad ülemaailmsesse võrku, ja maksimaalselt hakkavad ründajad robotit kasutama.
Juuruta VPS-i serverisse
Kui olete robotiga töötamise lõpetanud, tuleb see hostida serveris, mis töötab pidevalt ööpäevaringselt. See on tingitud asjaolust, et kui teie rakendus töötab, töötab ka robot. Niipea kui rakenduse välja lülitate, jääb ka teie bot magama.
Selles maailmas on palju VPS-servereid nii Windowsis kui ka Linuxis, kuid enamikul juhtudel on Linuxis hostimine palju odavam.
Discordi serveris soovitati mulle vscale.io ja ma lõin sellele kohe Ubuntu virtuaalserveri ja laadisin roboti üles. Ma ei kirjelda, kuidas see sait töötab, vaid lähen otse roboti seadete juurde.
Järgmiseks peate roboti üles laadima Git-teenusesse, nagu GitHub jms, ning kloonima selle VPS-serverisse või laadima oma roboti muul viisil alla. Pange tähele, et teil on ainult konsool, ilma GUI-ta. Üleüldse.
Kui olete oma roboti alla laadinud, peate selle käivitama. Selleks vajate:
Palju õnne! Teie robot töötab. Kahjuks hõivab bot aga konsooli ja VPS-serverist pole lihtne väljuda. Samuti peate serveri taaskäivitamise korral käivitama roboti uuel viisil. Olukorrast on paar väljapääsu. Kõik need on seotud käivitamisega serveri käivitamisel:
Lisa käivitamisskript faili /etc/init.d
Looge teenus, mis käivitub käivitamisel.
Ma ei näe mõtet nendel üksikasjalikult peatuda, Internetis on kõike piisavalt üksikasjalikult kirjeldatud.
Järeldused
Mul on hea meel, et võtsin selle ülesande vastu. See oli minu esimene robotite arendamise kogemus ja mul on hea meel, et sain uusi teadmisi C # ja Linuxiga töötamise kohta.