Vytvoření robota Discord na .NET Core s nasazením na server VPS

Vytvoření robota Discord na .NET Core s nasazením na server VPS

Ahoj Khabrovite!

Dnes uvidíte článek, který vám ukáže, jak vytvořit bota pomocí C# na .NET Core a jak jej spustit na vzdáleném serveru.

Článek se bude skládat z pozadí, přípravné fáze, logiky psaní a přenosu robota na vzdálený server.

Doufám, že tento článek pomůže mnoha začátečníkům.

pravěk

Všechno to začalo jedné bezesné podzimní noci, kterou jsem strávil na serveru Discord. Protože jsem se k němu nedávno přidal, začal jsem ho studovat nahoru a dolů. Když jsem našel textový kanál "Volná místa", začal jsem se zajímat, otevřel jsem ho a mezi nabídkami, které mě nezajímaly, našel tyto:

"Programátor (vývojář botů)
Požadavky:

  • znalost programovacích jazyků;
  • schopnost samoučení.

Пожелания:

  • schopnost porozumět kódu jiných lidí;
  • znalost funkčnosti DISCORD.

Úkoly:

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

Vaše výhoda:

  • Příležitost podpořit a ovlivnit projekt, který se vám líbí;
  • Získání zkušeností s prací v týmu;
  • Možnost prokázat a zlepšit stávající dovednosti.


Tohle mě hned zaujalo. Ano, za tuto práci nezaplatili, ale nepožadovali po vás žádné závazky a v portfoliu to nebude nadbytečné. Proto jsem napsal adminovi serveru a ten mě požádal, abych napsal robota, který bude zobrazovat statistiky hráče ve World of Tanks.

Přípravná fáze

Vytvoření robota Discord na .NET Core s nasazením na server VPS
Discrod
Než začneme psát našeho bota, musíme ho vytvořit pro Discord. Potřebuješ:

  1. Přihlaste se k účtu Discord по ссылке
  2. V záložce "Aplikace" klikněte na tlačítko "Nová aplikace" a pojmenujte robota
  3. Získejte token bota tak, že se přihlásíte do svého robota a v seznamu Nastavení najděte kartu „Bot“.
  4. Token někam uložte

Wargaming

Abyste získali přístup k Wargaming API, musíte si vytvořit aplikaci ve Wargaming. I zde je vše jednoduché:

  1. Přihlaste se ke svému Wargaming účtu na tomto odkazu
  2. Přejdeme do „Moje aplikace“ a klikneme na tlačítko „Přidat novou aplikaci“, uvedeme název aplikace a vybereme její typ
  3. Uložení ID aplikace

Vývoj

Už existuje svoboda volby. Někdo používá Visual Studio, někdo Rider, někdo je obecně mocný a píše kód ve Vimu (ostatně skuteční programátoři používají jen klávesnici, že?). Abyste však neimplementovali Discord API, můžete použít neoficiální knihovnu C# „DSharpPlus“. Můžete jej nainstalovat buď z NuGet, nebo vytvořením zdrojů sami z úložiště.

Pro ty, kteří nevědí nebo zapomněli, jak instalovat aplikace z NuGet.Pokyny pro Visual Studio

  1. Přejděte na kartu Projekt - Správa balíčků NuGet;
  2. Klikněte na recenzi a do vyhledávacího pole zadejte „DSharpPlus“;
  3. Vyberte a nainstalujte framework;
  4. ZISKU!

Přípravná fáze je u konce, můžete přistoupit k psaní robota.

Logika psaní

Vytvoření robota Discord na .NET Core s nasazením na server VPS

Nebudeme se zabývat celou logikou aplikace, pouze ukážu, jak pracovat se zachytáváním zpráv botem a jak pracovat s Wargaming API.

Práce s robotem Discord probíhá prostřednictvím statického asynchronního úkolu MainTask(string[] args);
Chcete-li tuto funkci volat, musíte se v Main zaregistrovat

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

Dále musíte inicializovat robota:

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

Kde token je token vašeho robota.
Poté prostřednictvím lambda napíšeme potřebné příkazy, které by měl bot provést:

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ískává přezdívku uživatele.

Tímto způsobem, když odešlete jakoukoli zprávu, která začíná &, robot vás pozdraví.

Na konci této funkce musíte napsat wait discord.ConnectAsync(); a čekat Task.Delay(-1);

To vám umožní provádět příkazy na pozadí, aniž byste zabírali hlavní vlákno.

Nyní se musíme vypořádat s Wargaming API. Zde je vše jednoduché - napište požadavky CURL, získejte odpověď ve formě řetězce JSON, vytáhněte potřebná data a provádějte s nimi manipulace.

Pří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;
        }

Pozornost! Přísně se nedoporučuje ukládat všechny tokeny a ID aplikací jako prostý text! Discord takové tokeny minimálně zakáže, když se dostanou do celosvětové sítě, a maximálně bota začnou využívat útočníci.

Nasadit na VPS - server

Vytvoření robota Discord na .NET Core s nasazením na server VPS

Jakmile s robotem skončíte, musí být hostován na serveru, který je neustále v provozu 24/7. To je způsobeno skutečností, že když je spuštěna vaše aplikace, běží také bot. Jakmile aplikaci vypnete, váš bot také usne.

V tomto světě existuje mnoho serverů VPS, jak na Windows, tak na Linuxu, nicméně ve většině případů je mnohem levnější hostovat na Linuxu.

Na serveru Discord mi bylo doporučeno vscale.io a okamžitě jsem na něm vytvořil virtuální server na Ubuntu a nahrál bota. Nebudu popisovat, jak tato stránka funguje, ale přejdu rovnou k nastavení bota.

Nejprve je potřeba nainstalovat potřebný software, který spustí našeho bota napsaného v .NET Core. Jak na to je popsáno zde.

Dále musíte nahrát robota do služby Git, jako je GitHub a podobně, a naklonovat jej na server VPS, nebo si svého robota stáhnout jinými způsoby. Vezměte prosím na vědomí, že budete mít pouze konzoli, žádné GUI nebude. Vůbec.

Po stažení robota jej musíte spustit. K tomu potřebujete:

  • Obnovení všech závislostí: obnovení dotnet
  • Sestavení aplikace: dotnet build name_project.sln -c Release
  • Přejít na vytvořenou knihovnu DLL;
  • dotnet název_souboru.dll

Gratulujeme! Váš robot běží. Robot však bohužel zabírá konzoli a není snadné ukončit server VPS. Také v případě restartu serveru budete muset bota spustit novým způsobem. Existuje několik způsobů, jak ze situace ven. Všechny souvisí se spuštěním při spuštění serveru:

  • Přidejte spouštěcí skript do /etc/init.d
  • Vytvořte službu, která se spustí při spuštění.

Nevidím smysl se jimi podrobně zabývat, vše je dostatečně podrobně popsáno na internetu.

Závěry

Jsem rád, že jsem se tohoto úkolu zhostil. Toto byla moje první zkušenost s vývojem botů a jsem rád, že jsem získal nové znalosti v C# a práci s Linuxem.

Odkaz na Discord server. Pro ty, kteří hrají hry Wargaming.
Odkaz na úložiště, kde se nachází robot Discord.
Odkaz na úložiště DSharpPlus.
Спасибо за внимание!

Zdroj: www.habr.com

Přidat komentář