Vytvorenie robota Discord na .NET Core s nasadením na server VPS

Vytvorenie robota Discord na .NET Core s nasadením na server VPS

Ahoj Khabroviti!

Dnes uvidíte článok, ktorý vám ukáže, ako vytvoriť bota pomocou C# na .NET Core a ako ho spustiť na vzdialenom serveri.

Článok bude pozostávať z pozadia, prípravnej fázy, logiky písania a prenosu robota na vzdialený server.

Dúfam, že tento článok pomôže mnohým začiatočníkom.

pravek

Všetko to začalo v jednu bezsennú jesennú noc, ktorú som strávil na serveri Discord. Keďže som sa k nemu nedávno pridal, začal som ho študovať hore-dole. Po nájdení textového kanála „Voľné miesta“ som sa začal zaujímať, otvoril som ho a medzi ponukami, ktoré ma nezaujali, som našiel tieto:

"Programátor (vývojár robotov)
požiadavky:

  • znalosť programovacích jazykov;
  • schopnosť samoučenia.

Пожелания:

  • schopnosť porozumieť kódu iných ľudí;
  • znalosť funkčnosti DISCORD.

ciele:

  • vývoj botov;
  • podpora a údržba robota.

Vaša výhoda:

  • Príležitosť podporiť a ovplyvniť projekt, ktorý sa vám páči;
  • Získanie skúseností s prácou v tíme;
  • Príležitosť preukázať a zlepšiť existujúce zručnosti.


Toto ma hneď zaujalo. Áno, za túto prácu nezaplatili, ale nepožadovali od vás žiadne záväzky a v portfóliu to nebude zbytočné. Preto som napísal adminovi servera a požiadal ma, aby som napísal robota, ktorý ukáže hráčove štatistiky vo World of Tanks.

Prípravná fáza

Vytvorenie robota Discord na .NET Core s nasadením na server VPS
Discrod
Než začneme písať nášho robota, musíme ho vytvoriť pre Discord. Potrebuješ:

  1. Prihláste sa do účtu Discord по ссылке
  2. Na karte „Aplikácie“ kliknite na tlačidlo „Nová aplikácia“ a pomenujte robota
  3. Získajte token bota tak, že sa prihlásite do svojho robota a v zozname „Nastavenia“ nájdete kartu „Bot“.
  4. Token niekam uložte

Wargaming

Okrem toho musíte vytvoriť aplikáciu vo Wargaming, aby ste získali prístup k Wargaming API. Aj tu je všetko jednoduché:

  1. Prihláste sa do svojho Wargaming účtu na tomto odkaze
  2. Prejdeme na „Moje aplikácie“ a klikneme na tlačidlo „Pridať novú aplikáciu“, kde uvedieme názov aplikácie a vyberieme jej typ
  3. Uloženie ID aplikácie

Softvér

Už existuje sloboda voľby. Niekto používa Visual Studio, niekto Rider, niekto je všeobecne výkonný a píše kód vo Vime (napokon, skutoční programátori používajú iba klávesnicu, však?). Aby ste však neimplementovali Discord API, môžete použiť neoficiálnu knižnicu C# „DSharpPlus“. Môžete si ho nainštalovať buď z NuGet, alebo vytvorením zdrojov sami z úložiska.

Pre tých, ktorí nevedia alebo zabudli, ako nainštalovať aplikácie z NuGet.Pokyny pre Visual Studio

  1. Prejdite na kartu Projekt - Správa balíkov NuGet;
  2. Kliknite na recenziu a do vyhľadávacieho poľa zadajte „DSharpPlus“;
  3. Vyberte a nainštalujte rámec;
  4. ZISK!

Prípravná fáza je u konca, môžete pokračovať v písaní robota.

Logika písania

Vytvorenie robota Discord na .NET Core s nasadením na server VPS

Nebudeme sa zaoberať celou logikou aplikácie, ukážem len, ako pracovať so zachytením správ botom a ako pracovať s Wargaming API.

Práca s robotom Discord prebieha prostredníctvom statickej asynchrónnej úlohy MainTask(string[] args);
Na zavolanie tejto funkcie sa musíte zaregistrovať v Main

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

Ďalej musíte inicializovať robota:

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

Kde token je token vášho robota.
Potom prostredníctvom lambda napíšeme potrebné príkazy, ktoré by mal robot vykonať:

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

Kde e.Author.Username získava prezývku používateľa.

Týmto spôsobom, keď pošlete akúkoľvek správu, ktorá začína &, robot vás pozdraví.

Na konci tejto funkcie musíte napísať wait discord.ConnectAsync(); a počkajte na Task.Delay(-1);

To vám umožní vykonávať príkazy na pozadí bez toho, aby ste zabrali hlavné vlákno.

Teraz sa musíme zaoberať rozhraním Wargaming API. Všetko je tu jednoduché - napíšte požiadavky CURL, získajte odpoveď vo forme reťazca JSON, vytiahnite odtiaľ potrebné údaje a vykonajte s nimi manipulácie.

Príklad práce s 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;
        }

Pozor! Dôrazne sa neodporúča ukladať všetky tokeny a ID aplikácií ako čistý text! Minimálne Discord zakáže takéto tokeny, keď sa dostanú do celosvetovej siete, a maximálne začnú bota využívať útočníci.

Nasadiť na server VPS

Vytvorenie robota Discord na .NET Core s nasadením na server VPS

Keď s robotom skončíte, musí byť hosťovaný na serveri, ktorý je neustále spustený 24 hodín denne, 7 dní v týždni. Je to spôsobené tým, že keď je spustená vaša aplikácia, je spustený aj bot. Akonáhle vypnete aplikáciu, váš robot tiež zaspí.

V tomto svete existuje veľa serverov VPS, na Windows aj na Linuxe, avšak vo väčšine prípadov je oveľa lacnejšie hostiť na Linuxe.

Na serveri Discord som dostal radu vscale.io a okamžite som na ňom vytvoril virtuálny server na Ubuntu a nahral som robota. Nebudem popisovať, ako táto stránka funguje, ale prejdem rovno k nastaveniam botov.

V prvom rade si musíte nainštalovať potrebný softvér, ktorý spustí nášho bota napísaného v .NET Core. Ako to urobiť, je popísané tu.

Ďalej musíte nahrať robota do služby Git, ako je GitHub a podobne, a naklonovať ho na server VPS alebo stiahnuť robota inými spôsobmi. Upozorňujeme, že budete mať iba konzolu, žiadne GUI. Vôbec.

Po stiahnutí robota ho musíte spustiť. Na to potrebujete:

  • Obnovte všetky závislosti: obnovenie dotnet
  • Zostavte aplikáciu: dotnet build name_project.sln -c Release
  • Prejsť na vybudovanú knižnicu DLL;
  • dotnet názov_súboru.dll

Gratulujem! Váš robot beží. Robot však bohužiaľ zaberá konzolu a nie je ľahké ukončiť server VPS. V prípade reštartu servera budete musieť robota spustiť novým spôsobom. Existuje niekoľko spôsobov, ako sa zo situácie dostať. Všetky súvisia so spustením pri spustení servera:

  • Pridajte spúšťací skript do /etc/init.d
  • Vytvorte službu, ktorá sa spustí pri štarte.

Nevidím zmysel sa nimi podrobne zaoberať, všetko je dostatočne podrobne popísané na internete.

Závery

Som rád, že som sa tejto úlohy zhostil. Toto bola moja prvá skúsenosť s vývojom botov a som rád, že som získal nové znalosti v C # a prácu s Linuxom.

Odkaz na Discord server. Pre tých, ktorí hrajú hry Wargaming.
Odkaz na úložisko, kde sa nachádza robot Discord.
Odkaz na úložisko DSharpPlus.
Ďakujem vám za pozornosť!

Zdroj: hab.com

Pridať komentár