Discord-botin luominen .NET Coreen VPS-palvelimelle ottamalla käyttöön
Hei Khabrovites!
Tänään näet artikkelin, jossa kerrotaan, miten botti luodaan C#:lla .NET Coressa ja miten se suoritetaan etäpalvelimella.
Artikkeli koostuu taustasta, valmisteluvaiheesta, logiikan kirjoittamisesta ja botin siirtämisestä etäpalvelimelle.
Toivon, että tämä artikkeli auttaa monia aloittelijoita.
esihistoria
Kaikki alkoi yhdestä unettomasta syysyöstä, jonka vietin Discord-palvelimella. Koska liityin äskettäin hänen luokseen, aloin tutkia häntä ylös ja alas. Löysin tekstikanavan "Vacancies", kiinnostuin, avasin sen ja löysin tarjouksista, jotka eivät kiinnostaneet minua:
"Ohjelmoija (bottien kehittäjä) vaatimukset:
ohjelmointikielten tuntemus;
kykyä itseopiskeluun.
Пожелания:
kyky ymmärtää muiden ihmisten koodia;
DISCORD-toiminnallisuuden tuntemus.
tavoitteet:
botin kehittäminen;
botin tuki ja ylläpito.
Sinun etusi:
Mahdollisuuden tukea ja vaikuttaa haluamaasi projektiin;
Kokemuksen hankkiminen ryhmätyöskentelystä;
Mahdollisuuden osoittaa ja kehittää olemassa olevia taitojaan.
Tämä kiinnosti minua heti. Kyllä, he eivät maksaneet tästä työstä, mutta he eivät vaatineet sinulta mitään velvoitteita, eikä se ole tarpeetonta salkussa. Siksi kirjoitin palvelimen järjestelmänvalvojalle, ja hän pyysi minua kirjoittamaan botin, joka näyttää pelaajan tilastot World of Tanksissa.
Valmisteluvaiheessa
Discrod
Ennen kuin alamme kirjoittaa bottiamme, meidän on luotava se Discordille. Tarvitset:
Siirrymme kohtaan "Omat sovellukset" ja napsautamme "Lisää uusi sovellus" -painiketta, annamme sovelluksen nimen ja valitsemme sen tyypin.
Sovellustunnuksen tallentaminen
Tuotteemme
Valinnanvapaus on jo olemassa. Joku käyttää Visual Studiota, joku Rideriä, joku on yleensä tehokas ja kirjoittaa koodia Vimillä (todelliset ohjelmoijat käyttävät vain näppäimistöä, eikö niin?). Voit kuitenkin käyttää epävirallista C#-kirjastoa “DSharpPlus”, jotta et ota Discord API:ta käyttöön. Voit asentaa sen joko NuGetistä tai rakentamalla lähteet itse arkistosta.
Niille, jotka eivät tiedä tai ovat unohtaneet kuinka asentaa sovelluksia NuGetistä.Visual Studion ohjeet
Siirry välilehdelle Projekti - Hallitse NuGet-paketteja;
Napsauta arvostelua ja kirjoita hakukenttään "DSharpPlus";
Valitse ja asenna kehys;
VOITTO!
Valmisteluvaihe on ohi, voit jatkaa botin kirjoittamista.
Kirjoituslogiikka
Emme ota huomioon sovelluksen koko logiikkaa, näytän vain, kuinka toimia botin viestien sieppauksen kanssa ja miten työskennellä Wargaming API:n kanssa.
Työskentely Discord-botin kanssa tapahtuu staattisen async:n kautta. Task MainTask(string[] args);
Tämän toiminnon kutsumiseksi Main-sivulla sinun on rekisteröidyttävä
Missä token on bottisi tunnus.
Sitten kirjoitamme lambdan kautta tarvittavat komennot, jotka botin tulee suorittaa:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Mistä e.Author.Username saa käyttäjän lempinimen.
Tällä tavalla, kun lähetät minkä tahansa viestin, joka alkaa &, botti tervehtii sinua.
Tämän funktion loppuun on kirjoitettava await discord.ConnectAsync(); ja odota Task.Delay(-1);
Tämän avulla voit suorittaa komentoja taustalla ilman pääsäiettä.
Nyt meidän on käsiteltävä Wargaming-sovellusliittymää. Kaikki on täällä yksinkertaista - kirjoita CURL-pyyntöjä, hanki vastaus JSON-merkkijonon muodossa, vedä sieltä tarvittavat tiedot ja suorita niitä koskevia manipulaatioita.
Esimerkki työskentelystä WargamingAPI:n kanssa
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;
}
Huomio! Ei ole ehdottomasti suositeltavaa tallentaa kaikkia tunnuksia ja sovellustunnuksia selkeänä tekstinä! Ainakin Discord kieltää tällaiset tunnukset, kun ne tulevat maailmanlaajuiseen verkkoon, ja korkeintaan hyökkääjät alkavat käyttää bottia.
Ota käyttöön VPS-palvelimelle
Kun olet valmis botin kanssa, se on isännöitävä palvelimella, joka on jatkuvasti käynnissä 24/7. Tämä johtuu siitä, että kun sovelluksesi on käynnissä, myös botti on käynnissä. Heti kun sammutat sovelluksen, myös bottisi nukahtaa.
Tässä maailmassa on monia VPS-palvelimia, sekä Windowsissa että Linuxissa, mutta useimmissa tapauksissa on paljon halvempaa isännöidä Linuxissa.
Discord-palvelimella minulle neuvottiin vscale.io, ja loin heti siihen virtuaalipalvelimen Ubuntuun ja latasin botin. En kuvaile tämän sivuston toimintaa, vaan siirryn suoraan botin asetuksiin.
Ensinnäkin sinun on asennettava tarvittava ohjelmisto, joka käyttää .NET Core -sovelluksella kirjoitettua bottiamme. Tässä kuvataan kuinka se tehdään.
Seuraavaksi sinun on ladattava botti Git-palveluun, kuten GitHubiin ja vastaaviin, ja kloonattava se VPS-palvelimelle tai ladattava bottisi muilla tavoilla. Huomaa, että sinulla on vain konsoli, ei käyttöliittymää. Ollenkaan.
Kun olet ladannut bottisi, sinun on suoritettava se. Tätä varten tarvitset:
Onnittelut! Bottisi on käynnissä. Valitettavasti botti kuitenkin käyttää konsolia, eikä VPS-palvelimelta poistuminen ole niin helppoa. Lisäksi, jos palvelin käynnistetään uudelleen, sinun on käynnistettävä botti uudella tavalla. Tilanteesta on pari ulospääsyä. Kaikki ne liittyvät käynnistykseen palvelimen käynnistyksen yhteydessä:
Lisää suorituskomentotiedosto tiedostoon /etc/init.d
Luo palvelu, joka toimii käynnistyksen yhteydessä.
En näe järkeä käsitellä niitä yksityiskohtaisesti, kaikki on kuvattu riittävän yksityiskohtaisesti Internetissä.
Tulokset
Olen iloinen, että otin tämän tehtävän. Tämä oli ensimmäinen bottikehityskokemukseni, ja olen iloinen, että sain uutta tietoa C #:stä ja Linuxin kanssa työskentelystä.