Að búa til Discord bot á .NET Core með dreifingu á VPS netþjón

Að búa til Discord bot á .NET Core með dreifingu á VPS netþjón

Halló Khabrovites!

Í dag munt þú sjá grein sem mun sýna þér hvernig á að búa til vélmenni með C# á .NET Core og hvernig á að keyra það á ytri netþjóni.

Greinin mun samanstanda af bakgrunni, undirbúningsstigi, ritun rökfræði og flutningi botnsins yfir á ytri netþjón.

Ég vona að þessi grein muni hjálpa mörgum byrjendum.

Forsaga

Þetta byrjaði allt á einni svefnlausri haustnótt sem ég eyddi á Discord servernum. Þar sem ég gekk nýlega til liðs við hann fór ég að rannsaka hann upp og niður. Eftir að hafa fundið textarásina „laus störf“ varð ég áhugasamur, opnaði hana og fann meðal tilboðanna sem vaktu ekki áhuga minn, þetta eru:

"Forritari (botnaforritari)
Kröfur:

  • þekking á forritunarmálum;
  • hæfni til sjálfsnáms.

Пожелания:

  • getu til að skilja kóða annarra;
  • þekkingu á DISCORD virkni.

Verkefni:

  • bot þróun;
  • stuðningur og viðhald botnsins.

Ávinningur þinn:

  • Tækifæri til að styðja og hafa áhrif á verkefnið sem þér líkar;
  • Að öðlast reynslu af því að vinna í teymi;
  • Tækifæri til að sýna og bæta núverandi færni.


Þetta vakti strax áhuga á mér. Já, þeir borguðu ekki fyrir þessa vinnu, en þeir kröfðust engar skuldbindingar af þér, og það mun ekki vera óþarfi í eignasafninu. Þess vegna skrifaði ég til þjónsstjórans og hann bað mig um að skrifa bot sem mun sýna tölfræði leikmannsins í World of Tanks.

Undirbúningsstigi

Að búa til Discord bot á .NET Core með dreifingu á VPS netþjón
Discrod
Áður en við byrjum að skrifa botninn okkar þurfum við að búa hann til fyrir Discord. Þú þarft:

  1. Skráðu þig inn á Discord reikning по ссылке
  2. Í flipanum „Umsóknir“, smelltu á „Nýtt forrit“ hnappinn og gefðu láni nafnið
  3. Fáðu botnatákn með því að skrá þig inn í botninn þinn og finna flipann „Bot“ í „Settings“ listanum
  4. Geymdu táknið einhvers staðar

wargaming

Einnig þarftu að búa til forrit í Wargaming til að fá aðgang að Wargaming API. Hér er líka allt einfalt:

  1. Skráðu þig inn á Wargaming reikninginn þinn með þessum hlekk
  2. Við förum í „Forritin mín“ og smellum á „Bæta við nýju forriti“ hnappinn, gefum upp nafn forritsins og veljum gerð þess
  3. Að vista auðkenni forritsins

hugbúnaður

Það er nú þegar valfrelsi. Einhver notar Visual Studio, einhver Rider, einhver er almennt öflugur og skrifar kóða í Vim (enda nota alvöru forritarar bara lyklaborðið, ekki satt?). Hins vegar, til þess að innleiða ekki Discord API, geturðu notað óopinbera C# bókasafnið „DSharpPlus“. Þú getur sett það upp annað hvort frá NuGet eða með því að byggja upp heimildirnar sjálfur úr geymslunni.

Fyrir þá sem ekki vita eða hafa gleymt hvernig á að setja upp forrit frá NuGet.Leiðbeiningar fyrir Visual Studio

  1. Farðu í flipann Verkefni - Stjórna NuGet pakka;
  2. Smelltu á umsögnina og sláðu inn „DSharpPlus“ í leitarreitinn;
  3. Veldu og settu upp ramma;
  4. HAGNAÐUR!

Undirbúningsstigi er lokið, þú getur haldið áfram að skrifa botninn.

Ritunarrökfræði

Að búa til Discord bot á .NET Core með dreifingu á VPS netþjón

Við munum ekki íhuga alla rökfræði forritsins, ég mun aðeins sýna hvernig á að vinna með hlerun skilaboða af botni og hvernig á að vinna með Wargaming API.

Unnið með Discord láni á sér stað í gegnum kyrrstöðu ósamstillt verkefni MainTask(streng[] args);
Til að kalla á þessa aðgerð þarftu að skrá þig í Main

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

Næst þarftu að frumstilla botann þinn:

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

Hvar táknið er tákn lánsins þíns.
Síðan, í gegnum lambda, skrifum við nauðsynlegar skipanir sem botninn ætti að framkvæma:

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

Þar sem e.Author.Username fær gælunafn notandans.

Á þennan hátt, þegar þú sendir skilaboð sem byrja á &, mun vélin heilsa þér.

Í lok þessarar aðgerðar verður þú að skrifa await discord.ConnectAsync(); og bíða Verkefni.Delay(-1);

Þetta gerir þér kleift að framkvæma skipanir í bakgrunni án þess að taka upp aðalþráðinn.

Nú þurfum við að takast á við Wargaming API. Allt er einfalt hér - skrifaðu CURL beiðnir, fáðu svar í formi JSON strengs, dragðu út nauðsynleg gögn þaðan og framkvæmdu meðhöndlun á þeim.

Dæmi um að vinna með WargamingAPI

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

Athugið! Það er stranglega ekki mælt með því að geyma öll tákn og auðkenni forrita í skýrum texta! Að minnsta kosti bannar Discord slík tákn þegar þau fara inn á netkerfi heimsins og í hámarki byrjar árásarmaðurinn að nota botmanninn.

Dreifa á VPS - miðlara

Að búa til Discord bot á .NET Core með dreifingu á VPS netþjón

Þegar þú ert búinn með botninn þarf hann að vera hýstur á netþjóni sem er stöðugt í gangi allan sólarhringinn. Þetta stafar af þeirri staðreynd að þegar forritið þitt er í gangi er botninn líka í gangi. Um leið og þú slekkur á forritinu sofnar vélmaðurinn þinn líka.

Margir VPS netþjónar eru til í þessum heimi, bæði á Windows og á Linux, hins vegar er í flestum tilfellum mun ódýrara að hýsa á Linux.

Á Discord netþjóninum var mér bent á vscale.io og ég bjó strax til sýndarþjónn á Ubuntu á honum og hlóð botninum upp. Ég mun ekki lýsa því hvernig þessi síða virkar, en fer beint í botastillingarnar.

Fyrst af öllu þarftu að setja upp nauðsynlegan hugbúnað sem mun keyra vélmenni okkar sem er skrifaður í .NET Core. Hvernig á að gera það er lýst hér.

Næst þarftu að hlaða botni upp á Git þjónustu, eins og GitHub og þess háttar, og klóna hann á VPS netþjón, eða hlaða niður botninum þínum á annan hátt. Vinsamlegast athugaðu að þú munt aðeins hafa leikjatölvu, ekkert GUI. Alls.

Eftir að þú hefur hlaðið niður botninum þínum þarftu að keyra hann. Fyrir þetta þarftu:

  • Endurheimtu allar ósjálfstæði: dotnet endurheimta
  • Byggja forrit: dotnet byggja nafn_verkefni.sln -c Útgáfa
  • Farðu í innbyggða DLL;
  • dotnet nafn_af_skrá.dll

Til hamingju! Botninn þinn er í gangi. Hins vegar tekur botninn, því miður, stjórnborðið og það er ekki auðvelt að fara út úr VPS netþjóninum. Einnig, ef um endurræsingu miðlara er að ræða, verður þú að ræsa vélina á nýjan hátt. Það eru nokkrar leiðir út úr ástandinu. Öll þau tengjast ræsingu við ræsingu netþjóns:

  • Bættu keyrsluskriftu við /etc/init.d
  • Búðu til þjónustu sem mun keyra við ræsingu.

Ég sé ekki tilganginn með því að staldra við þau í smáatriðum, öllu er lýst nægilega ítarlega á netinu.

Niðurstöður

Ég er ánægður með að hafa tekið að mér þetta verkefni. Þetta var fyrsta reynsla mín í þróun vélmenna og ég er ánægður með að hafa fengið nýja þekkingu í C # og að vinna með Linux.

Tengill á Discord netþjón. Fyrir þá sem spila Wargaming leiki.
Tengill á geymsluna þar sem Discord botni er staðsettur.
Tengill á DSharpPlus geymsluna.
Svara með tilvísun!

Heimild: www.habr.com

Bæta við athugasemd