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

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

Ahoj, Habráci!

Dnes se seznámíte s článkem, ve kterém bude popsáno, jak vytvořit bota pomocí C# na .NET Core a jak ho spustit na vzdáleném serveru.

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

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

Pozadí

Všechno začalo jednou bezesnou podzimní nocí, kterou jsem trávil na serveru Discord. Protože jsem se k němu relativně nedávno připojil, začal jsem ho prozkoumávat křížem krážem. Když jsem objevil textový kanál "Nabídky práce", zaujal mě, otevřel jsem ho a mezi nezajímavými nabídkami jsem našel tuto:

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

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

Přání:

  • umět se vyznat v cizím kódu;
  • znalost funkcí DISCORD.

Úkoly:

  • vývoj bota;
  • podpora a údržba chodu bota.

Vaše výhoda:

  • Možnost podpořit a ovlivnit zajímavý projekt;
  • Získání zkušenosti s prací v týmu;
  • Možnost předvést a zlepšit své stávající dovednosti."


To mě okamžitě zaujalo. Ano, za tuto práci se neplatilo, ale nebyly požadovány žádné závazky a do portfolia to bude navíc. Takže jsem napsal adminovi serveru, a on mě požádal, abych napsal bota, který bude ukazovat statistiky hráče ve World of Tanks.

Přípravná fáze

Vytvoření Discord bota na .NET Core s nasazením na VPS server
Discord
Než začneme psát našeho bota, je třeba ho nejprve vytvořit pro Discord. Budete potřebovat:

  1. Přihlásit se k účtu Discord na odkazu
  2. Na kartě "Applications" kliknout na tlačítko "New Application" a pojmenovat bota
  3. Získat token bota tím, že se přihlásíte k vašemu botovi a najdete v seznamu sekci "Settings" a záložku "Bot"
  4. Uložit token někam

Wargaming

Také je třeba vytvořit aplikaci ve Wargaming, abyste získali přístup k API Wargaming. To je také jednoduché:

  1. Přihlásit se k Wargaming účtu na tomto odkazu
  2. Přejít do "Moje aplikace" a kliknout na tlačítko "Přidat novou aplikaci", pojmenovat aplikaci a vybrat její typ
  3. Uložit ID aplikace

Software

Zde již máte svobodu volby. Někdo používá Visual Studio, někdo Rider, někdo dokonce mocný a píše kód ve Vim (všichni skuteční programátoři používají pouze klávesnici, že?). Nicméně, abyste nemuseli implementovat Discord API, můžete použít neoficiální knihovnu pro C# „DSharpPlus“. Tu můžete nainstalovat buď z NuGetu, nebo si ji sestavit sami ze zdrojového kódu v repozitáři.

Pro ty, kteří nevědí, nebo zapomněli, jak instalovat aplikace z NuGetu.Návod pro Visual Studio

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

Přípravná fáze je u konce, můžete přejít k psaní bota.

Psaní logiky

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

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

Práce s Discord botem se provádí přes funkci static async Task MainTask(string[] args);
Abychom tuto funkci vyvolali, je třeba v Main uvést

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

Dále je třeba inicializovat svého bota:

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

Kde token je token vašeho bota.
Poté, pomocí lambda, zadáme potřebné příkazy, které by měl bot provádět:

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

Kde e.Author.Username je získání přezdívky uživatele.

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

Na konci této funkce je nutné uvést await discord.ConnectAsync(); a await Task.Delay(-1);

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

Nyní je nutné se seznámit s Wargaming API. Tady je to jednoduché – píšete CURL dotazy, dostanete odpověď ve formátu JSON – řetězci, vytáhnete odtud potřebná data a provádíte na nich manipulace.

Příklad práce s WargamingAPI

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3&search=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("Hráč nebyl nalezen");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Minimálně tři znaky jsou vyžadovány");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Neplatné hledání");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Prázdný nickname");
                }
                else
                {
                    throw new Exception("Něco se pokazilo.");
                }
            }

            return player;
        }

Pozor! Ukládat všechny tokeny a ID aplikací v otevřeném formátu se striktně nedoporučuje! Minimálně – Discord blokuje takové tokeny, když se dostanou do celosvětové sítě, maximálně – bot začne být zneužíván útočníky.

Nasazení na VPS – server

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

Jakmile skončíte s botem, je nutné jej umístit na server, který běží nepřetržitě 24/7. To souvisí s tím, že když vaše aplikace funguje, funguje i bot. Jakmile aplikaci vypnete, váš bot se uspí.

Existuje mnoho VPS serverů, ať už na Windows, nebo na Linuxu, avšak v drtivé většině případů je umístění na Linuxu několikrát levnější.

Na serveru Discord mi doporučili vscale.io, a hned jsem na něm vytvořil virtuální server na Ubuntu a nahrál jsem bota. Nebudu popisovat, jak tento web funguje, ale rovnou přejdu k nastavení bota.

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

Poté je nutné nahrát bota na Git – službu, jako je GitHub a podobně, a zclonovat na VPS - server, nebo jinými způsoby stáhnout vašeho bota. Mějte na paměti, že budete mít pouze konzoli, GUI nebude. Vůbec.

Poté, co jste stáhli vašeho bota, je nutné ho spustit. K tomu musíte:

  • Obnovit všechny závislosti: dotnet restore
  • Sestavit aplikaci: dotnet build name_project.sln -c Release
  • Přejít k sestavené DLL;
  • dotnet name_of_file.dll

Gratuluji! Váš bot je spuštěn. Nicméně, bot bohužel zabírá konzoli, a tak z VPS serveru jen tak snadno nevyjdete. Také při restartu serveru bude nutné bot znovu spustit. Existuje však několik řešení. Všechna se týkají spuštění při startu serveru:

  • Přidat spuštění skriptu do /etc/init.d
  • Vytvořit službu, která se spustí při startu.

Nemá smysl se na ně příliš podrobně zaměřovat, na internetu je to popsáno dostatečně.

Závěry

Jsem rád, že jsem se ujal této úlohy. Byla to moje první zkušenost s vývojem bota, a jsem rád, že jsem získal nové znalosti o C# a práci s Linuxem.

Odkaz na Discord server. Pro ty, kdo hrají hry Wargaming.
Odkaz na repozitář, kde se nachází Discord bot.
Odkaz na repozitář DSharpPlus.
Děkujeme za pozornost!

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster