
Helló, Habr-rajongók!
Ma egy olyan cikket ismerhettek meg, amelyben bemutatom, hogyan lehet botot készíteni C# nyelven a .NET Core-on, és arról, hogyan lehet azt egy távoli szerveren üzembe helyezni.
A cikk felépítése a háttér történetéből, az előkészítési fázisból, a logika megírásából és a bot távoli szerverre történő áthelyezéséből fog állni.
Remélem, ez a cikk sok kezdőnek segíteni fog.
Háttér
Minden egy álmatlan őszi éjszakán kezdődött, amelyet a Discord szerveren töltöttem. Mivel viszonylag nemrég csatlakoztam, alaposan megkeztem felfedezni. Felfedeztem a „Munkaajánlatok” szöveges csatornát, ami felkeltette az érdeklődésemet, kinyitottam, és az érdektelen ajánlatok között találtam ezt:
„Programozó (bot fejlesztő)
Elvárások:
- programozási nyelvek ismerete;
- önálló tanulási képesség.
Elvárások:
- képesség mások kódjának megértésére;
- a DISCORD funkcióinak ismerete.
Feladatok:
- bot fejlesztése;
- a bot működésének támogatása és karbantartása.
Előnyök:
- Lehetőség arra, hogy támogass és befolyásold egy tetsző projektet;
- Tapasztalat megszerzése csapatmunkában;
- Lehetőség arra, hogy bemutasd és fejleszd meglévő készségeidet.”
Ez azonnal felkeltette az érdeklődésemet. Igen, ezért a munkaért nem fizettek, de nem is vártak el tőled semmilyen kötelezettséget, és a portfóliódban sem lesz haszontalan. Ezért írtam a szerver adminisztrátorának, és ő megkért, hogy írjak egy botot, amely megmutatja a játékos statisztikáit a World of Tanks-ban.
Előkészítési fázis

Discord
Mielőtt elkezdjük írni a botunkat, létre kell hoznunk azt a Discord számára. Ehhez szükséges:
- Bejelentkezni a Discord fiókba
- Az 'Applications' fülön kattints a 'New Application' gombra, és nevezd el a botot
- Szerezd meg a bot tokenjét, bejelentkezve a botodba, és keresd meg a 'Settings' menü 'Bot' fülét
- Tartsd meg valahol a tokenet
Wargaming
Ezen kívül létre kell hozni egy alkalmazást a Wargamingnél, hogy hozzáférj a Wargaming API-hoz. Itt is minden egyszerű:
- Lépj be a Wargaming fiókba
- Lépj a 'Saját alkalmazások' oldalra, és kattints az 'Új alkalmazás hozzáadása' gombra, adj nevet az alkalmazásnak, és válaszd ki a típusát
- Mentse el az alkalmazás ID-jét
Szoftver
Itt már van választási lehetőség. Valaki Visual Studiot használ, valaki Rider-t, mások pedig akár Vim-ben írnak kódot (mert a valódi programozók csak a billentyűzetet használják, ugye?). Azonban, hogy ne kelljen megvalósítani a Discord API-t, használhatunk egy nem hivatalos C# könyvtárat, az "DSharpPlus"-t. Ezt telepíthetjük NuGet-ből, vagy magunk is összegyűjthetjük a forrást a repóból.
Azok számára, akik nem tudják, vagy elfelejtették, hogyan kell alkalmazásokat telepíteni a NuGet-ból.Útmutató Visual Studio-hoz
- Lépjünk a Projekt fülre – NuGet csomagkezelés;
- Kattintsunk a böngészésre, és a keresőmezőbe írjuk be az "DSharpPlus"-t;
- Válasszuk ki és telepítsük a keretrendszert;
- NYERESÉG!
A felkészülési szakasz véget ért, folytathatjuk a bot írását.
A logika megírása

A program logikáját nem fogjuk teljesen átbeszélni, csak megmutatom, hogyan lehet a bot üzeneteit megkísérelni, és hogyan lehet használni a Wargaming API-t.
A Discord bottal való munka a static async Task MainTask(string[] args); függvényen keresztül történik;
A függvény meghívásához a Main-ben be kell írni
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
}); Ahol a token a botod tokenje.
Ezután, egy lábda segítségével, megadjuk 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 e.Author.Username a felhasználó nickjének meg szerzését jelenti.
Így amikor bármilyen üzenetet küldesz, amely "&"-el kezdődik, a bot üdvözölni fog.
A függvény végén szükséges beírni await discord.ConnectAsync(); és await Task.Delay(-1);
Ez lehetővé teszi a parancsok háttérben való végrehajtását, anélkül, hogy a fő szálat lefoglalnánk.
Most foglalkozzunk a Wargaming API-val. Itt minden egyszerű – CURL kéréseket írsz, JSON formátumban kapod meg a választ, kinyered belőle a szükséges adatokat, és manipulálsz velük.
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("A játékos nem található");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Legalább három karakter szükséges");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Érvénytelen keresés");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Üres felhasználónév");
}
else
{
throw new Exception("Valami hiba történt.");
}
}
return player;
}
Figyelem! Az összes token és alkalmazás ID tárolása nyilvános formában szigorúan nem ajánlott! Legalább is – a Discord blokkolja az ilyen tokeneket, amikor bekerülnek a világhálóra, legrosszabb esetben – a botot rosszindulatú felhasználók használják.
VPS telepítése – szerver

Miután befejezted a botot, azt egy folyamatosan működő szerverre kell telepíteni, amely 24/7 elérhető. Ennek oka, hogy amikor az alkalmazás működik, a bot is működik. Amint leállítod az alkalmazást, a botod is aludni tér.
Sok VPS szerver létezik ezen a világon, mind Windows, mind Linux alatt, de a legtöbb esetben Linux alatt sokkal olcsóbb a telepítés.
A Discord szerveren ajánlották nekem a vscale.io-t, és azonnal létrehoztam rajta egy virtuális szervert Ubuntu alatt, és feltöltöttem a botot. Nem írom le, hogyan működik ez az oldal, hanem azonnal rátérek a bot beállítására.
Először is, szükség van a megfelelő szoftver telepítésére, amely elindítja a .NET Core-ra írt botunkat. .
Ezután fel kell töltened a botot egy Git szolgáltatásba, mint például a GitHub, és klónoznod kell a VPS szerverre, vagy más módon letöltheted a botodat. Ne feledd, hogy csak konzol lesz, GUI nem lesz. Egyáltalán.
Miután letöltötted a botodat, el kell indítanod. Ehhez szükséged van:
- Minden függőség helyreállítása: dotnet restore
- Az alkalmazás felépítése: dotnet build name_project.sln -c Release
- Lépj a felépített DLL-hez;
- dotnet name_of_file.dll
Gratulálok! A botod elindult. Azonban a bot sajnos elfoglalja a konzolt, így a VPS szerverről való kilépés nem lesz olyan egyszerű. Továbbá, a szerver újraindítása esetén a botot újra kell indítani. Itt van néhány megoldás. Mindegyik a szerver indításakor való elindításra vonatkozik:
- Futtass le egy scriptet a /etc/init.d mappában
- Hozz létre egy szolgáltatást, amely indításkor fut.
Nem látom értelmét, hogy részletesen belemerüljek, az interneten elég részletesen le van írva.
Következtetések
Örülök, hogy ezt a feladatot vállaltam. Ez volt az első tapasztalatom egy bot fejlesztésében, és örülök, hogy új ismereteket szereztem C#-ban és Linux használatában.
Link a Discord szerverhez.
Köszönöm a figyelmet!
Forrás: habr.com
