Discord bot bat sortzea .NET Core-n VPS zerbitzari batean hedatzearekin

Discord bot bat sortzea .NET Core-n VPS zerbitzari batean hedatzearekin

Kaixo Khabrovites!

Gaur .NET Core-n C# erabiliz bot bat nola sortu eta urruneko zerbitzari batean nola exekutatu erakutsiko dizun artikulu bat ikusiko duzu.

Artikuluak atzeko planoa, prestaketa fasea, logika idaztea eta bot-a urruneko zerbitzari batera transferitzea izango ditu.

Espero dut artikulu honek hasiberri askori laguntzea.

historiaurrea

Discord zerbitzarian pasatu nuen lorik gabeko udazkeneko gau batean hasi zen dena. Duela gutxi harekin bat egin nuenez, gora eta behera ikasten hasi nintzen. "Lanpostu hutsak" testu-kanala aurkitu ondoren, interesatu egin nintzen, ireki nuen eta interesatzen ez zitzaizkidan eskaintzen artean, hauek dira:

"Programatzailea (bot garatzailea)
baldintzak:

  • programazio-lengoaien ezagutza;
  • autoikaskuntzarako gaitasuna.

ПоТСлания:

  • besteen kodea ulertzeko gaitasuna;
  • DISCORD funtzionalitatearen ezagutza.

helburuak:

  • bot garapena;
  • bot-aren laguntza eta mantentze-lanak.

Zure abantaila:

  • Gustuko duzun proiektuan laguntzeko eta eragiteko aukera;
  • Taldean lan egiteko esperientzia lortzea;
  • Dauden gaitasunak frogatzeko eta hobetzeko aukera.


Hau berehala interesatu zitzaidan. Bai, ez dute lan hori ordaindu, baina ez dizute inolako betebeharrik eskatzen, eta ez da soberan egongo zorroan. Hori dela eta, zerbitzariaren administratzaileari idatzi nion eta World of Tanks-en jokalariaren estatistikak erakutsiko dituen bot bat idazteko eskatu zidan.

Prestaketa-fasea

Discord bot bat sortzea .NET Core-n VPS zerbitzari batean hedatzearekin
Discrod
Gure bot idazten hasi baino lehen, Discord-erako sortu behar dugu. Behar duzu:

  1. Hasi saioa Discord kontuan ΠΏΠΎ ссылкС
  2. "Aplikazioak" fitxan, egin klik "Aplikazio berria" botoian eta izendatu bot-ari
  3. Lortu bot token bat zure bot-en saioa hasita eta "Ezarpenak" zerrendan "Bot" fitxa aurkituz
  4. Gorde tokena nonbait

Gerra-jokoak

Gainera, Wargaming-en aplikazio bat sortu behar duzu Wargaming APIrako sarbidea lortzeko. Hemen ere dena erraza da:

  1. Hasi saioa zure Wargaming kontuan esteka honen bidez
  2. "Nire aplikazioak" atalera joango gara eta "Gehitu aplikazio berri bat" botoian klik egiten dugu, aplikazioaren izena emanez eta mota hautatuz.
  3. Aplikazioaren IDa gordetzea

software

Dagoeneko aukeratzeko askatasuna dago. Norbaitek Visual Studio erabiltzen du, norbait Rider, norbaitek oro har indartsua da, eta Vim-en kodea idazten du (azken finean, benetako programatzaileek teklatua bakarrik erabiltzen dute, ezta?). Hala ere, Discord APIa ez ezartzeko, C# liburutegi ez-ofiziala erabil dezakezu "DSharpPlus". NuGet-etik instalatu dezakezu edo iturburuak zuk zeuk eraikiz biltegitik.

NuGet-eko aplikazioak nola instalatu ez dakiten edo ahaztu dutenentzat.Visual Studiorako argibideak

  1. Joan Proiektua - Kudeatu NuGet paketeak fitxara;
  2. Egin klik berrikuspenean eta bilaketa eremuan sartu "DSharpPlus";
  3. Aukeratu eta instalatu markoa;
  4. IRABAZIA!

Prestaketa fasea amaitu da, bot-a idazten jarraitu dezakezu.

Idazketaren logika

Discord bot bat sortzea .NET Core-n VPS zerbitzari batean hedatzearekin

Ez dugu aplikazioaren logika osoa kontuan hartuko, bot-ak mezuen atzematearekin nola lan egin eta Wargaming APIarekin nola lan egin behar den erakutsiko dut.

Discord bot-arekin lan egitea Task MainTask (string[] args) estatiko asinkronizatuaren bidez gertatzen da;
Funtzio honetara deitzeko, Main-en erregistratu behar duzu

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

Ondoren, zure bot-a hasieratu behar duzu:

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

Non tokena da zure botaren tokena.
Ondoren, lambdaren bidez, bot-ak exekutatu behar dituen beharrezko komandoak idazten ditugu:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(β€œHello, ” + e.Author.Username);
    }
};

Non e.Author.Username erabiltzailearen goitizena lortzen ari den.

Horrela, &-rekin hasten den edozein mezu bidaltzen duzunean, bot-ak agurtuko zaitu.

Funtzio honen amaieran, await discord.ConnectAsync(); eta itxaron Zeregin.Atzerapena(-1);

Honek komandoak atzeko planoan exekutatzeko aukera emango dizu hari nagusia hartu gabe.

Orain Wargaming APIari aurre egin behar diogu. Hemen dena erraza da: idatzi CURL eskaerak, jaso JSON kate moduan erantzun bat, atera beharrezko datuak hortik eta egin manipulazioak.

WargamingAPI-rekin lan egiteko adibide bat

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;
        }

Kontuz! Ez da gomendagarria token eta aplikazio ID guztiak testu argian gordetzea! Gutxienez, Discord-ek halako tokenak debekatzen ditu mundu osoko sarean sartzen direnean, eta gehienez, bot-a erasotzaileek erabiltzen hasten dira.

Inplementatu VPS - zerbitzarian

Discord bot bat sortzea .NET Core-n VPS zerbitzari batean hedatzearekin

Botarekin amaitutakoan, etengabe 24/7 exekutatzen ari den zerbitzari batean ostatatuta egon behar da. Hau da, zure aplikazioa exekutatzen ari denean, bot-a ere martxan dagoelako. Aplikazioa itzali bezain laster, zure bot-a ere lokartzen da.

Mundu honetan VPS zerbitzari asko existitzen dira, bai Windows-en eta baita Linux-en, hala ere, kasu gehienetan, Linux-en ostatatzea askoz merkeagoa da.

Discord zerbitzarian, vscale.io aholkatu zidaten, eta berehala Ubuntun zerbitzari birtual bat sortu nuen bertan eta bot-a igo nuen. Ez dut gune honek nola funtzionatzen duen deskribatuko, baina zuzenean bot-en ezarpenetara joango naiz.

Lehenik eta behin, .NET Core-n idatzitako gure bot-a exekutatuko duen beharrezko softwarea instalatu behar duzu. Nola egin hemen deskribatzen da.

Ondoren, bot-a Git zerbitzu batera kargatu behar duzu, GitHub eta antzekoetara, eta VPS zerbitzari batera klonatu edo zure bot-a beste modu batzuetan deskargatu behar duzu. Kontuan izan kontsola bat bakarrik izango duzula, ez GUIrik. Batere.

Zure bot-a deskargatu ondoren, exekutatu behar duzu. Horretarako, behar duzu:

  • Berreskuratu mendekotasun guztiak: dotnet berreskuratzea
  • Eraiki aplikazioa: dotnet build name_project.sln -c Askapena
  • Joan eraikitako DLLra;
  • dotnet fitxategiaren_izena.dll

Zorionak! Zure bot exekutatzen ari da. Hala ere, bot-ak, zoritxarrez, kontsola hartzen du, eta ez da erraza VPS zerbitzaritik irtetea. Gainera, zerbitzari bat berrabiaraziz gero, bot-a modu berri batean abiarazi beharko duzu. Egoeratik ateratzeko modu pare bat daude. Horiek guztiak zerbitzariaren abiaraztean abiaraztearekin lotuta daude:

  • Gehitu run script-a /etc/init.d
  • Sortu abiaraztean abiaraziko den zerbitzu bat.

Ez diot zentzurik ikusten zehatz-mehatz aztertzeari, dena nahikoa zehatz deskribatzen da Interneten.

Findings

Pozten naiz zeregin hau hartu nuelako. Hau izan zen nire lehenengo bot garapen esperientzia, eta pozten naiz ezagutza berriak lortu ditudalako C #-n eta Linux-ekin lan egiteaz.

Estekatu Discord zerbitzariarekin. Wargaming jokoetan jokatzen dutenentzat.
Estekatu Discord bot-a dagoen biltegira.
Esteka DSharpPlus biltegira.
Eskerrik asko zure arreta!

Iturria: www.habr.com

Gehitu iruzkin berria