Discord-botin luominen .NET Coreen VPS-palvelimelle ottamalla käyttöön

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

Discord-botin luominen .NET Coreen VPS-palvelimelle ottamalla käyttöön
Discrod
Ennen kuin alamme kirjoittaa bottiamme, meidän on luotava se Discordille. Tarvitset:

  1. Kirjaudu Discord-tilille по ссылке
  2. Napsauta "Sovellukset"-välilehdellä "Uusi sovellus" -painiketta ja nimeä robotti
  3. Hanki bot-tunnus kirjautumalla bottiin ja etsimällä "Botti"-välilehti "Asetukset"-luettelosta
  4. Tallenna tunnus jonnekin

Wargaming

Sinun on myös luotava sovellus Wargamingissa, jotta pääset käyttämään Wargaming-sovellusliittymää. Tässäkin kaikki on yksinkertaista:

  1. Kirjaudu Wargaming-tilillesi tällä linkillä
  2. Siirrymme kohtaan "Omat sovellukset" ja napsautamme "Lisää uusi sovellus" -painiketta, annamme sovelluksen nimen ja valitsemme sen tyypin.
  3. 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

  1. Siirry välilehdelle Projekti - Hallitse NuGet-paketteja;
  2. Napsauta arvostelua ja kirjoita hakukenttään "DSharpPlus";
  3. Valitse ja asenna kehys;
  4. VOITTO!

Valmisteluvaihe on ohi, voit jatkaa botin kirjoittamista.

Kirjoituslogiikka

Discord-botin luominen .NET Coreen VPS-palvelimelle ottamalla käyttöön

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ä

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Seuraavaksi sinun on alustettava bottisi:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

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

Discord-botin luominen .NET Coreen VPS-palvelimelle ottamalla käyttöön

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:

  • Palauta kaikki riippuvuudet: dotnet-palautus
  • Rakenna sovellus: dotnet build name_project.sln -c Release
  • Siirry rakennettuun DLL:ään;
  • pisteverkon_tiedoston_nimi.dll

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ä.

Linkki Discord-palvelimelle. Niille, jotka pelaavat Wargaming-pelejä.
Linkki arkistoon, jossa Discord-botti sijaitsee.
Linkki DSharpPlus-tietovarastoon.
Спасибо за внимание!

Lähde: will.com

Lisää kommentti