Discord bot létrehozása .NET Core-on VPS-kiszolgálóra történő telepítéssel

Discord bot létrehozása .NET Core-on VPS-kiszolgálóra történő telepítéssel

Sziasztok Khabrovites!

Ma látni fog egy cikket, amely bemutatja, hogyan hozhat létre botot C# használatával a .NET Core-on, és hogyan futtathatja azt távoli kiszolgálón.

A cikk a háttérből, az előkészítő szakaszból, a logika írásából és a bot távoli szerverre átviteléből fog állni.

Remélem, ez a cikk sok kezdőnek segít.

őstörténet

Az egész egy álmatlan őszi éjszakán kezdődött, amit a Discord szerveren töltöttem. Mivel nemrég csatlakoztam hozzá, elkezdtem tanulmányozni őt fel és alá. Miután megtaláltam az "Üreshelyek" szöveges csatornát, felkeltette az érdeklődésemet, megnyitottam, és a nem érdekelt ajánlatok között a következőket találtam:

"Programozó (bot fejlesztő)
követelmények:

  • programozási nyelvek ismerete;
  • önálló tanulási képesség.

Пожелания:

  • képesség mások kódjának megértésére;
  • a DISCORD működésének ismerete.

célkitűzések:

  • bot fejlesztés;
  • a bot támogatása és karbantartása.

Az Ön előnye:

  • Lehetőség az Ön által kedvelt projekt támogatására és befolyásolására;
  • Csapatban végzett munka tapasztalatszerzése;
  • Lehetőség a meglévő készségek bemutatására és fejlesztésére.


Ez azonnal érdekelt. Igen, nem fizettek ezért a munkáért, de semmilyen kötelezettséget nem követeltek Öntől, és ez nem lesz felesleges a portfólióban. Ezért írtam a szerver adminisztrátorának, aki megkért, hogy írjak egy botot, ami megmutatja a játékos statisztikáit a World of Tanksben.

Előkészítő szakasz

Discord bot létrehozása .NET Core-on VPS-kiszolgálóra történő telepítéssel
Discrod
Mielőtt elkezdenénk írni a botunkat, létre kell hoznunk a Discord számára. Szükséged van:

  1. Jelentkezzen be a Discord fiókba по ссылке
  2. Az "Alkalmazások" lapon kattintson az "Új alkalmazás" gombra, és nevezze el a botot
  3. Szerezzen be egy bot tokent, ha bejelentkezik a botjába, és megkeresi a „Bot” lapot a „Beállítások” listában.
  4. Mentse el a tokent valahol

wargaming

Ezenkívül létre kell hoznia egy alkalmazást a Wargamingban, hogy hozzáférjen a Wargaming API-hoz. Itt is minden egyszerű:

  1. Jelentkezzen be Wargaming fiókjába ezen a linken keresztül
  2. Lépjünk a "Saját alkalmazások" oldalra, és kattintsunk az "Új alkalmazás hozzáadása" gombra, megadva az alkalmazás nevét és kiválasztva a típusát.
  3. Alkalmazásazonosító mentése

szoftver

Már megvan a választás szabadsága. Valaki a Visual Studio-t használja, valaki a Rider-t, valaki általában erős, és Vim-ben ír kódot (végül is, az igazi programozók csak a billentyűzetet használják, igaz?). Azonban annak érdekében, hogy ne implementálja a Discord API-t, használhatja a „DSharpPlus” nem hivatalos C# könyvtárat. Telepítheti a NuGetből, vagy úgy, hogy saját maga építi fel a forrásokat a tárolóból.

Azok számára, akik nem tudják, vagy elfelejtették, hogyan telepítsenek alkalmazásokat a NuGetről.Útmutató a Visual Studio számára

  1. Lépjen a Projekt - NuGet-csomagok kezelése lapra;
  2. Kattintson a véleményre, és a keresőmezőbe írja be a „DSharpPlus” kifejezést;
  3. Válassza ki és telepítse a keretrendszert;
  4. PROFIT!

Az előkészítő szakasz véget ért, folytathatja a bot megírását.

Írás logika

Discord bot létrehozása .NET Core-on VPS-kiszolgálóra történő telepítéssel

Nem vesszük figyelembe az alkalmazás teljes logikáját, csak megmutatom, hogyan kell dolgozni a bot általi üzenetek elfogásával, és hogyan kell dolgozni a Wargaming API-val.

A Discord bottal való munka a statikus aszinkron feladaton keresztül történik. Task MainTask(string[] args);
Ennek a funkciónak a meghívásához a Főmenüben regisztrálnia kell

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

Ezután inicializálnia kell a botját:

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

Hol található a botok tokenje.
Ezután a lambdán keresztül megírjuk a szükséges parancsokat, amelyeket a botnak végre kell hajtania:

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

Ahol az e.Author.Username a felhasználó becenevét kapja.

Így amikor olyan üzenetet küld, amely &-vel kezdődik, a bot üdvözölni fogja.

A függvény végére a await discord parancsot kell írni.ConnectAsync(); és várja a Task.Delay(-1);

Ez lehetővé teszi a parancsok végrehajtását a háttérben anélkül, hogy felvenné a főszálat.

Most a Wargaming API-val kell foglalkoznunk. Itt minden egyszerű - írjon CURL-kéréseket, kapjon választ JSON-karakterlánc formájában, húzza ki onnan a szükséges adatokat, és végezzen manipulációkat rajtuk.

Példa a WargamingAPI használatára

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;
        }

Figyelem! Szigorúan nem ajánlott minden tokent és alkalmazásazonosítót tiszta szövegben tárolni! A Discord legalább letiltja az ilyen tokeneket, amikor belépnek a világméretű hálózatba, és legfeljebb a botot kezdik használni a támadók.

Telepítés VPS-kiszolgálóra

Discord bot létrehozása .NET Core-on VPS-kiszolgálóra történő telepítéssel

Ha végzett a bottal, azt egy folyamatosan, éjjel-nappal működő szerveren kell tárolni. Ez annak a ténynek köszönhető, hogy amikor az alkalmazás fut, a bot is fut. Amint kikapcsolja az alkalmazást, a botja is elalszik.

Sok VPS-szerver létezik ezen a világon, mind Windowson, mind Linuxon, azonban a legtöbb esetben sokkal olcsóbb a hosztolás Linuxon.

A Discord szerveren a vscale.io-t tanácsolták, azon nyomban létrehoztam egy virtuális szervert Ubuntun, és feltöltöttem a botot. Nem írom le, hogyan működik ez az oldal, hanem egyenesen a bot beállításaihoz megyek.

Először is telepíteni kell a szükséges szoftvert, amely futtatja a .NET Core-ban írt botunkat. Itt van leírva, hogyan kell csinálni.

Ezután fel kell töltenie a botot egy Git szolgáltatásba, például a GitHubba és hasonlókba, és klónoznia kell egy VPS-kiszolgálóra, vagy más módon kell letöltenie a botot. Kérjük, vegye figyelembe, hogy csak konzolja lesz, grafikus felhasználói felület nélkül. Egyáltalán.

Miután letöltötte a botját, futtassa azt. Ehhez szüksége van:

  • Minden függőség visszaállítása: dotnet visszaállítás
  • Alkalmazás összeállítása: dotnet build name_project.sln -c Release
  • Ugrás a beépített DLL-hez;
  • ponthálózat_fájl_neve.dll

Gratulálunk! A robotod fut. A bot azonban sajnos a konzolt foglalja el, és nem könnyű kilépni a VPS szerverről. Ezenkívül a szerver újraindítása esetén új módon kell elindítania a botot. Van néhány kiút a helyzetből. Mindegyik a szerver indításakor történő indításhoz kapcsolódik:

  • Adja hozzá a futtató szkriptet az /etc/init.d fájlhoz
  • Hozzon létre egy szolgáltatást, amely elindul az indításkor.

Nem látom értelmét részletesen foglalkozni velük, minden kellően részletesen le van írva az interneten.

Álláspontja

Örülök, hogy elvállaltam ezt a feladatot. Ez volt az első botfejlesztési tapasztalatom, és örülök, hogy új ismereteket szereztem a C # és a Linux-szal való munka terén.

Link a Discord szerverhez. Azoknak, akik Wargaming játékokkal játszanak.
Hivatkozás arra a tárhelyre, ahol a Discord bot található.
Hivatkozás a DSharpPlus adattárhoz.
Спасибо за внимание!

Forrás: will.com

Hozzászólás