Skep 'n Discord-bot op .NET Core met ontplooiing na 'n VPS-bediener
Hallo, Khabrovsk inwoners!
Vandag sal jy 'n artikel lees wat jou sal vertel hoe om 'n bot te skep met C# op .NET Core, en hoe om dit op 'n afgeleë bediener te laat loop.
Die artikel sal bestaan uit agtergrond, voorbereidende stadium, skryflogika en die oordrag van die bot na 'n afgeleë bediener.
Ek hoop dat hierdie artikel baie beginners sal help.
voorgeskiedenis
Dit het alles begin een slapelose herfsnag, wat ek op die Discord-bediener deurgebring het. Aangesien ek betreklik onlangs daarby aangesluit het, het ek dit binne en buite begin bestudeer. Nadat ek die tekskanaal "Vakatures" ontdek het, het ek belang gestel, dit oopgemaak en onder die aanbiedings gevind wat my nie interesseer nie, dit:
"Programmeerder (bot-ontwikkelaar) vereistes:
kennis van programmeertale;
vermoë om self te leer.
Пожелания:
vermoë om ander mense se kode te verstaan;
kennis van DISCORD-funksionaliteit.
doelwitte:
bot ontwikkeling;
ondersteuning en instandhouding van die bot.
Jou voordeel:
Die geleentheid om die projek waarvan jy hou, te ondersteun en te beïnvloed;
Opdoen van ondervinding om in 'n span te werk;
Geleentheid om bestaande vaardighede te demonstreer en te verbeter.”
Dit het dadelik my belangstelling geprikkel. Ja, hulle het nie vir hierdie werk betaal nie, maar hulle het geen verpligtinge van jou vereis nie, en dit sal nie oorbodig wees in jou portefeulje nie. So ek het aan die bediener admin geskryf, en hy het my gevra om 'n bot te skryf wat spelerstatistieke in World of Tanks sal wys.
Die voorbereidende fase
Discrod
Voordat ons ons bot begin skryf, moet ons dit vir Discord skep. Jy benodig:
Gaan na "My toepassings" en klik op die "Voeg 'n nuwe toepassing by"-knoppie, gee die toepassing se naam en kies die tipe
Stoor tans die aansoek-ID
sagteware
Daar is reeds vryheid van keuse. Sommige gebruik Visual Studio, sommige Rider, sommige is oor die algemeen kragtig, en skryf kode in Vim (regte programmeerders gebruik immers net die sleutelbord, reg?). Om die implementering van die Discord API te vermy, kan u egter die nie-amptelike C#-biblioteek “DSharpPlus” gebruik. U kan dit óf vanaf NuGet installeer, óf deur die bronne self uit die bewaarplek te versamel.
Vir diegene wat nie weet of vergeet het hoe om toepassings van NuGet te installeer nie.Instruksies vir Visual Studio
Gaan na die Projek-oortjie - Bestuur NuGet-pakkette;
Klik op review en voer "DSharpPlus" in die soekveld in;
Kies en installeer die raamwerk;
WINS!
Die voorbereidingsfase is verby, jy kan voortgaan om 'n bot te skryf.
Skryflogika
Ons sal nie na al die toepassingslogika kyk nie; Ek sal jou net wys hoe om te werk met bot-onderskepping van boodskappe en hoe om met die Wargaming API te werk.
Werk met die Discord-bot vind plaas deur die statiese async Taak MainTask(string[] args);
Om hierdie funksie te noem, moet jy in Main skryf
Waar token jou bot se token is.
Dan, met behulp van 'n lambda, skryf ons die nodige opdragte wat die bot moet uitvoer:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Waar e.Author.Username – kry die gebruiker se bynaam.
Op hierdie manier, wanneer jy enige boodskap stuur wat met & begin, sal die bot jou groet.
Aan die einde van hierdie funksie, moet jy skryf await discord.ConnectAsync(); en wag op Taak.Vertraging(-1);
Dit sal toelaat dat opdragte in die agtergrond uitgevoer word sonder om die hoofdraad te beset.
Nou moet jy die Wargaming API verstaan. Alles is eenvoudig hier - skryf CURL-versoeke, ontvang 'n antwoord in die vorm van 'n JSON-string, onttrek die nodige data daarvandaan en manipuleer dit.
'N Voorbeeld van werk met 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;
}
Aandag! Dit word streng nie aanbeveel om alle tekens en toepassings-ID's in duidelike teks te stoor nie! Discord verbied op 'n minimum sulke tekens wanneer hulle op die Wêreldwye Web kom; op 'n maksimum begin die bot deur aanvallers gebruik word.
Ontplooi na VPS-bediener
Sodra jy klaar is met die bot, moet dit gehuisves word op 'n bediener wat voortdurend 24/7 werk. Dit is te wyte aan die feit dat wanneer jou toepassing loop, die bot ook loop. Sodra jy die toepassing afskakel, gaan jou bot aan die slaap.
Daar is baie VPS-bedieners in hierdie wêreld, beide op Windows en Linux, maar in die meeste gevalle is dit baie goedkoper om op Linux aan te bied.
Op die Discord-bediener het hulle vscale.io vir my aanbeveel, en ek het dadelik 'n virtuele bediener op Ubuntu daarop geskep en die bot opgelaai. Ek sal nie beskryf hoe hierdie webwerf werk nie, maar sal dadelik voortgaan met die opstel van die bot.
Vervolgens moet jy die bot na Git oplaai - 'n diens soos GitHub en dies meer - en dit na 'n VPS-bediener kloon, of, op ander maniere, jou bot aflaai. Neem asseblief kennis dat jy net 'n konsole sal hê, geen GUI nie. Enigsins.
Nadat jy jou bot afgelaai het, moet jy dit begin. Om dit te doen, benodig jy:
Herstel alle afhanklikhede: dotnet herstel
Bou die toepassing: dotnet bou naam_projek.sln -c Vrystelling
Gaan na die geboude DLL;
dotnet naam_van_lêer.dll
Baie geluk! Jou bot loop. Ongelukkig beset die bot egter die konsole, en dit is nie so maklik om die VPS-bediener te verlaat nie. Ook, as die bediener herlaai word, sal jy die bot weer moet begin. Daar is 'n paar maniere om uit die situasie te kom. Almal van hulle hou verband met die bekendstelling by die opstart van die bediener:
Voeg script launch by /etc/init.d
Skep 'n diens wat sal begin by opstart.
Ek sien geen sin daarin om in detail daaroor te stil te staan nie; alles word in voldoende detail op die internet beskryf.
Bevindinge
Ek is bly ek het hierdie taak op my geneem. Dit was my eerste ervaring met die ontwikkeling van 'n bot, en ek is bly dat ek nuwe kennis in C# opgedoen het en met Linux gewerk het.