Discord-boti loomine .NET Core'is ja selle paigaldamine VPS-serverisse

Discord-boti loomine .NET Core'is ja selle paigaldamine VPS-serverisse

Tere, Habrashanid!

TÀna tutvute artikliga, milles rÀÀgitakse, kuidas luua boti, kasutades C#-s .NET Core'i, ja kuidas see kÀivitada eemaldatud serveris.

Artikkel koosneb eelhistooriast, ettevalmistusest, loogika kirjutamisest ja boti ĂŒleviimisest eemaldatud serverisse.

Loodan, et see artikkel aitab paljusid algajaid.

Eellugu

KĂ”ik algas ĂŒhel unetul sĂŒgisöösel, mille veetsin Discordi serveris. Kuna ma liitusin sellega suhteliselt hiljuti, hakkasin seda sĂŒvitsi uurima. Leidsin tekstikanali "Tööpakkumised" ja huvi pĂ€rast avasin selle. Otsides kĂ”rvalisi pakkumisi, leidsin sealt jĂ€rgmise:

„Programmeerija (boti arendaja)
NÔuded:

  • programmeerimiskeelte tundmine;
  • vĂ”ime enesearenguks.

Soovitused:

  • oskus mĂ”ista teiste koodi;
  • teadlikkus DISCORDi funktsionaalsusest.

Ülesanded:

  • boti arendamine;
  • boti tĂ”hususe toetamine ja hooldamine.

Teie kasu:

  • VĂ”imalus toetada ja mĂ”ju avaldada meelepĂ€rasele projektile;
  • Kogemus meeskonnas töötamisest;
  • VĂ”imalus demonstreerida ja tĂ€iendada olemasolevaid oskusi.»


See köitis mu tĂ€helepanu kohe. Jah, selle töö eest ei makstud, kuid sinult ei nĂ”utud mingeid kohustusi, ja portfooliosse ei ole see ĂŒleliigne. SeetĂ”ttu kirjutasin serveri administraatorile ja ta palus mul luua boti, mis kuvab World of Tanks'i mĂ€ngija statistikat.

Ettevalmistusetapp

Discord-boti loomine .NET Core'is ja selle paigaldamine VPS-serverisse
Discord
Enne kui hakkame meie boti kirjutama, tuleb see kÔigepealt Discordis luua. Teil on vaja:

  1. Siseneda Discordi kontole linki pidi
  2. Vahekaartide "Rakendused" all klikkige nupule "Uus rakendus" ja nimetage bot
  3. Saada boti token, sisenedes oma boti ja leides loendist "Seaded" vahekaart "Bot"
  4. Salvesta token kuskil

Wargaming

Samuti peate looma rakenduse Wargamingus, et saada juurdepÀÀs Wargaming API-le. See on samuti lihtne:

  1. Siseneda Wargamingu kontole sellel linkil
  2. Minge "Minu rakendused" ja klĂ”psake nuppu "Lisa uus rakendus", andes rakendusele nime ja valides selle tĂŒĂŒbi
  3. Salvesta rakenduse ID

Tarkvara

Siin on juba valikuvabadus. MÔni kasutab Visual Studio't, mÔni Riderit, mÔni kirjutab isegi vÔimsas Vimis (pÀris programmeerijad kasutavad ju vaid klaviatuuri, eks?). Kuid et mitte rakendada Discord API-d, vÔib kasutada C# mittetÀielikku teeki 'DSharpPlus'. Selle saab installida kas NuGet'ist vÔi ise allalaadides lÀhtekoodi hoidlast.

Neil, kes ei tea vÔi on unustanud, kuidas installida rakendusi NuGet'ist.Juhised Visual Studio jaoks

  1. Liigume vahekaardile Projekt – NuGet pakettide haldamine;
  2. Klikkige ĂŒlevaates ja otsinguvĂ€lja sisestage 'DSharpPlus';
  3. Valige ja installige framework;
  4. PROFIT!

Ettevalmistav etapp on lĂ”ppenud, nĂŒĂŒd vĂ”ib minna boti kirjutamise juurde.

Logika kirjutamine

Discord-boti loomine .NET Core'is ja selle paigaldamine VPS-serverisse

Kogu rakenduse loogikat me ei kÀsitle, nÀitan vaid, kuidas töötada sÔnumite katkestamisega botiga ja kuidas töötada Wargaming API-ga.

Töötamine Discord boti kaudu toimub funktsiooni static async Task MainTask(string[] args); kaudu.
Selle funktsiooni kutsumiseks tuleb Main'is kirjutada

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

Edasi peate initsialiseerima oma boti:

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, kirjutame vajalikud kÀsklused, 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 on kasutaja hĂŒĂŒdnimede saamine.

Nii et kui saadate mis tahes sÔnumi, mis algab &-ga, tervitab bot teid.

Selle funktsiooni lÔpus tuleb kirjutada await discord.ConnectAsync(); ja await Task.Delay(-1);

See vÔimaldab tÀita komande taustal, blokeerimata peamist lÔime.

NĂŒĂŒd tuleb tutvuda Wargaming API-ga. Siin on kĂ”ik lihtne – kirjutage CURL-pĂ€ringud, saage vastus JSON-stringina, tĂ”mmake sealt vajalikud andmed vĂ€lja ja tehke nendega manipulatsioone.

NĂ€ide WargamingAPI kasutamisest

aval Player FindPlayer(string otsitavNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + otsitavNickname;
            Player mÀngija = 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)
                {
                    mÀngija = new Player
                    {
                        Nickname = parsed.data[0].nickname,
                        Id = parsed.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("MĂ€ngijat ei leitud");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("VĂ€hemalt kolm sĂŒmbolit on vajalikud");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Vale otsing");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("TĂŒhi nickname");
                }
                else
                {
                    throw new Exception("Midagi lÀks valesti.");
                }
            }

            return mÀngija;
        }

TĂ€helepanu! KĂ”iki tokene ja rakenduste ID-sid ei soovitata hoida avalikult! VĂ€hemalt – Discord blokeerib sellised tokenid, kui need satuvad ĂŒlemaailmsesse vĂ”rku, maksimaalselt – bot hakkab kurjategijate kĂ€es tööle.

VPS – serverisse juurutamine

Discord-boti loomine .NET Core'is ja selle paigaldamine VPS-serverisse

PÀrast seda, kui olete botiga lÔpetanud, 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 lÔpetate rakenduse, magab ka teie bot.

Maailmas on palju VPS servereid, nii Windowsi kui ka Linuxi peal, ent enamikul juhtudel on Linuxis hostimine kordades odavam.

Discordi serveris soovitati mulle vscale.io, ning ma lĂ”in seal kohe virtuaalse serveri Ubuntu peal ja laadisin boti ĂŒles. Ma ei hakka selgitama, kuidas see sait töötab, vaid lĂ€hen kohe boti seadistamise juurde.

Esmalt peate installima vajaliku tarkvara, mis kÀivitab meie boti, mis on kirjutatud .NET Core'is. Kuidas seda teha, on siin kirjeldatud.

SeejĂ€rel peate boti ĂŒles laadima Git – teenusesse, nagu GitHub ja sarnased, ning kloonima selle VPS – serverisse vĂ”i muul moel alla laadima oma boti. Pange tĂ€hele, et teil on vaid kĂ€surea liides, GUI-d ei ole.

PÀrast seda, kui olete oma boti alla laadinud, peate selle kÀivitama. Selleks peate:

  • Taastama kĂ”ik sĂ”ltuvused: dotnet restore
  • Koguma rakenduse: dotnet build name_project.sln -c Release
  • Minema loodud DLL-faili juurde;
  • dotnet name_of_file.dll

Palju Ônne! Teie bot on kÀivitunud. Kahjuks aga blokeerib bot konsooli ja VPS-serverist vÀljumine ei ole nii lihtne. Samuti, kui server taaskÀivitub, tuleb bot uuesti kÀivitada. Siin on mÔned lahendused. KÔik need on seotud serveri kÀivitamisel bot'i kÀivitamisega:

  • Lisada skripti kĂ€itamine /etc/init.d kausta
  • Luua teenus, mis kĂ€ivitub alguses.

Ei nÀe mÔtet neist pÔhjalikult rÀÀkida, kÔik on piisavalt detailselt internetis kirjeldatud.

JĂ€reldused

Olen rÔÔmus, et asusin seda ĂŒlesannet tegema. See oli minu esimene kogemus boti arendamisel ning olen rÔÔmus, et sain uusi teadmisi C#-st ja Linuxi kasutamisest.

Link Discord-serverile. Need, kes mÀngivad Wargamingi mÀnge.
Link repole, kus asub Discord bot.
Link DSharpPlus repole.
AitÀh tÀhelepanu eest!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster