Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener

Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener

Hallo, Khabrovsk inwoners!

Vandag sal jy 'n artikel lees wat jou sal vertel hoe om 'n bot te skep met C# op .NET Core, en hoe om dit op 'n afgeleë bediener te laat loop.

Die artikel sal bestaan ​​uit agtergrond, voorbereidende stadium, skryflogika en die oordrag van die bot na 'n afgeleë bediener.

Ek hoop dat hierdie artikel baie beginners sal help.

voorgeskiedenis

Dit het alles begin een slapelose herfsnag, wat ek op die Discord-bediener deurgebring het. Aangesien ek betreklik onlangs daarby aangesluit het, het ek dit binne en buite begin bestudeer. Nadat ek die tekskanaal "Vakatures" ontdek het, het ek belang gestel, dit oopgemaak en onder die aanbiedings gevind wat my nie interesseer nie, dit:

"Programmeerder (bot-ontwikkelaar)
vereistes:

  • kennis van programmeertale;
  • vermoë om self te leer.

Пожелания:

  • vermoë om ander mense se kode te verstaan;
  • kennis van DISCORD-funksionaliteit.

doelwitte:

  • bot ontwikkeling;
  • ondersteuning en instandhouding van die bot.

Jou voordeel:

  • Die geleentheid om die projek waarvan jy hou, te ondersteun en te beïnvloed;
  • Opdoen van ondervinding om in 'n span te werk;
  • Geleentheid om bestaande vaardighede te demonstreer en te verbeter.”


Dit het dadelik my belangstelling geprikkel. Ja, hulle het nie vir hierdie werk betaal nie, maar hulle het geen verpligtinge van jou vereis nie, en dit sal nie oorbodig wees in jou portefeulje nie. So ek het aan die bediener admin geskryf, en hy het my gevra om 'n bot te skryf wat spelerstatistieke in World of Tanks sal wys.

Die voorbereidende fase

Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener
Discrod
Voordat ons ons bot begin skryf, moet ons dit vir Discord skep. Jy benodig:

  1. Meld aan by Discord-rekening по ссылке
  2. In die "Toepassings"-oortjie, klik op die "Nuwe toepassing"-knoppie en noem die bot
  3. Kry 'n bot-token deur by jou bot aan te meld en die "Bot"-oortjie in die "Instellings"-lys te vind
  4. Stoor die teken iewers

oorlogspeletjies

Jy moet ook 'n toepassing in Wargaming skep om toegang tot die Wargaming API te kry. Alles is ook eenvoudig hier:

  1. Meld aan by jou Wargaming-rekening deur hierdie skakel
  2. Gaan na "My toepassings" en klik op die "Voeg 'n nuwe toepassing by"-knoppie, gee die toepassing se naam en kies die tipe
  3. Stoor tans die aansoek-ID

sagteware

Daar is reeds vryheid van keuse. Sommige gebruik Visual Studio, sommige Rider, sommige is oor die algemeen kragtig, en skryf kode in Vim (regte programmeerders gebruik immers net die sleutelbord, reg?). Om die implementering van die Discord API te vermy, kan u egter die nie-amptelike C#-biblioteek “DSharpPlus” gebruik. U kan dit óf vanaf NuGet installeer, óf deur die bronne self uit die bewaarplek te versamel.

Vir diegene wat nie weet of vergeet het hoe om toepassings van NuGet te installeer nie.Instruksies vir Visual Studio

  1. Gaan na die Projek-oortjie - Bestuur NuGet-pakkette;
  2. Klik op review en voer "DSharpPlus" in die soekveld in;
  3. Kies en installeer die raamwerk;
  4. WINS!

Die voorbereidingsfase is verby, jy kan voortgaan om 'n bot te skryf.

Skryflogika

Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener

Ons sal nie na al die toepassingslogika kyk nie; Ek sal jou net wys hoe om te werk met bot-onderskepping van boodskappe en hoe om met die Wargaming API te werk.

Werk met die Discord-bot vind plaas deur die statiese async Taak MainTask(string[] args);
Om hierdie funksie te noem, moet jy in Main skryf

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

Vervolgens moet jy jou bot inisialiseer:

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

Waar token jou bot se token is.
Dan, met behulp van 'n lambda, skryf ons die nodige opdragte wat die bot moet uitvoer:

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

Waar e.Author.Username – kry die gebruiker se bynaam.

Op hierdie manier, wanneer jy enige boodskap stuur wat met & begin, sal die bot jou groet.

Aan die einde van hierdie funksie, moet jy skryf await discord.ConnectAsync(); en wag op Taak.Vertraging(-1);

Dit sal toelaat dat opdragte in die agtergrond uitgevoer word sonder om die hoofdraad te beset.

Nou moet jy die Wargaming API verstaan. Alles is eenvoudig hier - skryf CURL-versoeke, ontvang 'n antwoord in die vorm van 'n JSON-string, onttrek die nodige data daarvandaan en manipuleer dit.

'N Voorbeeld van werk met 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;
        }

Aandag! Dit word streng nie aanbeveel om alle tekens en toepassings-ID's in duidelike teks te stoor nie! Discord verbied op 'n minimum sulke tekens wanneer hulle op die Wêreldwye Web kom; op 'n maksimum begin die bot deur aanvallers gebruik word.

Ontplooi na VPS-bediener

Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener

Sodra jy klaar is met die bot, moet dit gehuisves word op 'n bediener wat voortdurend 24/7 werk. Dit is te wyte aan die feit dat wanneer jou toepassing loop, die bot ook loop. Sodra jy die toepassing afskakel, gaan jou bot aan die slaap.

Daar is baie VPS-bedieners in hierdie wêreld, beide op Windows en Linux, maar in die meeste gevalle is dit baie goedkoper om op Linux aan te bied.

Op die Discord-bediener het hulle vscale.io vir my aanbeveel, en ek het dadelik 'n virtuele bediener op Ubuntu daarop geskep en die bot opgelaai. Ek sal nie beskryf hoe hierdie webwerf werk nie, maar sal dadelik voortgaan met die opstel van die bot.

Eerstens moet jy die nodige sagteware installeer wat ons bot, geskryf in .NET Core, sal laat loop. Hoe om dit te doen, word hier beskryf.

Vervolgens moet jy die bot na Git oplaai - 'n diens soos GitHub en dies meer - en dit na 'n VPS-bediener kloon, of, op ander maniere, jou bot aflaai. Neem asseblief kennis dat jy net 'n konsole sal hê, geen GUI nie. Enigsins.

Nadat jy jou bot afgelaai het, moet jy dit begin. Om dit te doen, benodig jy:

  • Herstel alle afhanklikhede: dotnet herstel
  • Bou die toepassing: dotnet bou naam_projek.sln -c Vrystelling
  • Gaan na die geboude DLL;
  • dotnet naam_van_lêer.dll

Baie geluk! Jou bot loop. Ongelukkig beset die bot egter die konsole, en dit is nie so maklik om die VPS-bediener te verlaat nie. Ook, as die bediener herlaai word, sal jy die bot weer moet begin. Daar is 'n paar maniere om uit die situasie te kom. Almal van hulle hou verband met die bekendstelling by die opstart van die bediener:

  • Voeg script launch by /etc/init.d
  • Skep 'n diens wat sal begin by opstart.

Ek sien geen sin daarin om in detail daaroor te stil te staan ​​nie; alles word in voldoende detail op die internet beskryf.

Bevindinge

Ek is bly ek het hierdie taak op my geneem. Dit was my eerste ervaring met die ontwikkeling van 'n bot, en ek is bly dat ek nuwe kennis in C# opgedoen het en met Linux gewerk het.

Skakel na Discord-bediener. Vir diegene wat Wargaming-speletjies speel.
Skakel na die bewaarplek waar die Discord-bot geleë is.
Skakel na DSharpPlus-bewaarplek.
Skep 'n nuwe weergawe!

Bron: will.com

Voeg 'n opmerking