ProHoster > Blog > Adminisztráció > 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
Discrod
Mielőtt elkezdenénk írni a botunkat, létre kell hoznunk a Discord számára. Szükséged van:
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.
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
Lépjen a Projekt - NuGet-csomagok kezelése lapra;
Kattintson a véleményre, és a keresőmezőbe írja be a „DSharpPlus” kifejezést;
Válassza ki és telepítse a keretrendszert;
PROFIT!
Az előkészítő szakasz véget ért, folytathatja a bot megírását.
Írás logika
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
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
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.
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
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.