Discord robota izveide .NET Core ar izvietošanu VPS serverī

Discord robota izveide .NET Core ar izvietošanu VPS serverī

Sveiki Khabrovites!

Šodien jūs redzēsiet rakstu, kas parādīs, kā izveidot robotprogrammatūru, izmantojot C# uz .NET Core, un kā to palaist attālajā serverī.

Raksts sastāvēs no fona, sagatavošanās posma, loģikas rakstīšanas un robota pārsūtīšanas uz attālo serveri.

Es ceru, ka šis raksts palīdzēs daudziem iesācējiem.

Aizvēsture

Viss sākās vienā bezmiegā rudens naktī, ko pavadīju Discord serverī. Tā kā nesen pievienojos viņam, es sāku pētīt viņu augšup un lejup. Atrodot teksta kanālu "Vakances", es ieinteresējos, atvēru to un starp piedāvājumiem, kas mani neinteresēja, atradu šādus:

Programmētājs (rotu izstrādātājs)
Prasības:

  • programmēšanas valodu zināšanas;
  • pašmācības spējas.

Пожелания:

  • spēja saprast citu cilvēku kodu;
  • zināšanas par DISCORD funkcionalitāti.

Mērķi:

  • botu izstrāde;
  • robota atbalsts un apkope.

Jūsu ieguvums:

  • Iespēju atbalstīt un ietekmēt sev tīkamu projektu;
  • Pieredzes gūšana darbā komandā;
  • Iespēja demonstrēt un pilnveidot esošās prasmes.


Tas mani uzreiz ieinteresēja. Jā, viņi par šo darbu nemaksāja, taču nekādas saistības no jums neprasīja, un portfelī tas nebūs lieki. Tāpēc es uzrakstīju servera administratoram, un viņš man lūdza uzrakstīt botu, kas parādīs spēlētāja statistiku World of Tanks.

Sagatavošanas posms

Discord robota izveide .NET Core ar izvietošanu VPS serverī
Discrod
Pirms sākam rakstīt savu robotprogrammatūru, mums tas ir jāizveido Discord. Tev vajag:

  1. Piesakieties Discord kontā по ссылке
  2. Cilnē "Programmas" noklikšķiniet uz pogas "Jauna lietojumprogramma" un nosauciet robotu
  3. Iegūstiet robota pilnvaru, piesakoties savā botā un sarakstā Iestatījumi atrodiet cilni "Bot".
  4. Saglabājiet tokenu kaut kur

Wargaming

Turklāt jums ir jāizveido lietojumprogramma Wargaming, lai piekļūtu Wargaming API. Arī šeit viss ir vienkārši:

  1. Piesakieties savā Wargaming kontā izmantojot šo saiti
  2. Mēs ejam uz "Manas lietojumprogrammas" un noklikšķiniet uz pogas "Pievienot jaunu lietojumprogrammu", norādot lietojumprogrammas nosaukumu un izvēloties tās veidu.
  3. Lietojumprogrammas ID saglabāšana

programmatūra

Tur jau ir izvēles brīvība. Kāds izmanto Visual Studio, kāds Rider, kāds parasti ir spēcīgs un raksta kodu Vim (galu galā īsti programmētāji izmanto tikai tastatūru, vai ne?). Tomēr, lai neieviestu Discord API, varat izmantot neoficiālo C# bibliotēku “DSharpPlus”. Varat to instalēt no NuGet vai pats veidojot avotus no krātuves.

Tiem, kas nezina vai ir aizmirsuši, kā instalēt lietojumprogrammas no NuGet.Visual Studio instrukcijas

  1. Dodieties uz cilni Projekts - Pārvaldīt NuGet pakotnes;
  2. Noklikšķiniet uz pārskata un meklēšanas laukā ievadiet “DSharpPlus”;
  3. Izvēlieties un uzstādiet ietvaru;
  4. IENĀKUMS!

Sagatavošanas posms ir beidzies, jūs varat turpināt rakstīt botu.

Rakstīšanas loģika

Discord robota izveide .NET Core ar izvietošanu VPS serverī

Mēs neapskatīsim visu lietojumprogrammas loģiku, es tikai parādīšu, kā strādāt ar ziņojumu pārtveršanu, ko veic robots, un kā strādāt ar Wargaming API.

Darbs ar Discord botu notiek, izmantojot statisko asinhrono uzdevumu MainTask(string[] args);
Lai izsauktu šo funkciju, galvenajā sadaļā ir jāreģistrējas

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

Pēc tam jums ir jāinicializē robots:

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

Kur ir jūsu robota marķieris.
Pēc tam, izmantojot lambda, mēs rakstām nepieciešamās komandas, kas robotam jāizpilda:

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

Kur e.Author.Username iegūst lietotāja segvārdu.

Tādā veidā, nosūtot ziņojumu, kas sākas ar &, robots jūs sveicinās.

Šīs funkcijas beigās jāieraksta await discord.ConnectAsync(); un gaidiet Task.Delay(-1);

Tas ļaus jums izpildīt komandas fonā, neaizņemot galveno pavedienu.

Tagad mums jātiek galā ar Wargaming API. Šeit viss ir vienkārši - rakstiet CURL pieprasījumus, saņemiet atbildi JSON virknes veidā, izvelciet no turienes nepieciešamos datus un veiciet ar tiem manipulācijas.

Piemērs darbam ar 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;
        }

Uzmanību! Stingri nav ieteicams visus marķierus un lietojumprogrammu ID glabāt skaidrā tekstā! Discord vismaz aizliedz šādus marķierus, kad tie nonāk pasaules tīklā, un maksimāli, robotu sāk izmantot uzbrucēji.

Izvietot VPS - serverī

Discord robota izveide .NET Core ar izvietošanu VPS serverī

Kad esat pabeidzis ar robotprogrammatūru, tas ir jāmitina serverī, kas pastāvīgi darbojas 24 stundas diennaktī. Tas ir saistīts ar faktu, ka tad, kad darbojas jūsu lietojumprogramma, darbojas arī robots. Tiklīdz izslēdzat lietojumprogrammu, jūsu robots arī aizmigs.

Šajā pasaulē pastāv daudzi VPS serveri gan operētājsistēmā Windows, gan Linux, tomēr vairumā gadījumu to mitināšana uz Linux ir daudz lētāka.

Discord serverī man tika ieteikts vscale.io, un es nekavējoties izveidoju tajā virtuālo serveri Ubuntu un augšupielādēju robotu. Es neaprakstīšu, kā šī vietne darbojas, bet pāriešu tieši uz robota iestatījumiem.

Pirmkārt, jums ir jāinstalē nepieciešamā programmatūra, kas darbinās mūsu robotprogrammatūru, kas rakstīta .NET Core. Šeit ir aprakstīts, kā to izdarīt.

Pēc tam jums ir jāaugšupielādē robots pakalpojumā Git, piemēram, GitHub un tamlīdzīgi, un jāklonē tas VPS serverī vai jālejupielādē robots citos veidos. Lūdzu, ņemiet vērā, ka jums būs tikai konsole, bez GUI. Pavisam.

Kad esat lejupielādējis robotprogrammatūru, tas ir jāpalaiž. Šim nolūkam jums ir nepieciešams:

  • Atjaunot visas atkarības: dotnet atjaunošana
  • Būvējuma lietojumprogramma: dotnet build name_project.sln -c Izlaidums
  • Dodieties uz iebūvēto DLL;
  • punkttīkla_faila_nosaukums.dll

Apsveicam! Jūsu robots darbojas. Tomēr robots, diemžēl, aizņem konsoli, un nav tik vienkārši iziet no VPS servera. Turklāt servera restartēšanas gadījumā robots būs jāstartē jaunā veidā. Ir pāris izejas no situācijas. Visi no tiem ir saistīti ar palaišanu servera startēšanas laikā:

  • Pievienojiet izpildes skriptu failam /etc/init.d
  • Izveidojiet pakalpojumu, kas darbosies startēšanas laikā.

Es neredzu jēgu pie tiem sīki pakavēties, viss ir pietiekami detalizēti aprakstīts internetā.

Atzinumi

Priecājos, ka uzņēmos šo uzdevumu. Šī bija mana pirmā robotu izstrādes pieredze, un esmu priecīgs, ka ieguvu jaunas zināšanas C # un darbā ar Linux.

Saite uz Discord serveri. Tiem, kas spēlē Wargaming spēles.
Saite uz repozitoriju, kurā atrodas Discord bot.
Saite uz DSharpPlus repozitoriju.
Спасибо за внимание!

Avots: www.habr.com

Pievieno komentāru