
Hej, Habr-anhÀngare!
Idag kommer du att bekanta dig med en artikel som förklarar hur man skapar en bot med C# pÄ .NET Core och hur man fÄr den att fungera pÄ en fjÀrrserver.
Artikeln kommer att bestÄ av en bakgrund, förberedelser, skrivande av logik och överföring av boten till en fjÀrrserver.
Jag hoppas att denna artikel kommer att hjÀlpa mÄnga nybörjare.
Bakgrund
Allt började en sömnlös höstnatt som jag tillbringade pÄ en Discord-server. Eftersom jag ganska nyligen anslöt mig till den, började jag utforska den grundligt. Jag upptÀckte textkanalen "Jobbannonser" och blev intresserad, sÄ jag öppnade den och hittade bland de erbjudanden som inte intresserade mig detta:
"Programmerare (botutvecklare)
Krav:
- kunskaper i programmeringssprÄk;
- förmÄga att lÀra sig sjÀlv.
ĂnskemĂ„l:
- förmÄga att förstÄ andras kod;
- kunskap om DISCORD:s funktionalitet.
Uppgifter:
- utveckling av boten;
- underhÄll och support av botens funktion.
Din fördel:
- Möjlighet att stödja och pÄverka ett intressant projekt;
- Erfarenhet av att arbeta i team;
- Möjlighet att visa och förbÀttra befintliga fÀrdigheter."
Det hÀr fascinerade mig omedelbart. Ja, för detta arbete betalades det inte, men inga förpliktelser krÀvdes av dig, och dessutom kommer det att vara en bra tillÀgg till portföljen. SÄ jag skrev till serveradministratören, och han bad mig att skriva en bot som skulle visa spelarens statistik i World of Tanks.
Förberedelsefasen

Discord
Innan vi pÄbörjar skrivandet av vÄr bot mÄste vi skapa en för Discord. Du behöver:
- Logga in pÄ Discord-kontot
- Klicka pÄ knappen "New Application" i fliken "Applications" och namnge boten
- HÀmta botens token genom att logga in pÄ din bot och hitta "Bot"-fliken under "Settings" i listan
- Spara token nÄgonstans
Wargaming
Dessutom behöver du skapa en applikation i Wargaming för att fÄ tillgÄng till Wargamings API. Det Àr ocksÄ enkelt:
- Logga in pÄ Wargaming-kontot
- GÄ till "Mina applikationer" och klicka pÄ knappen "LÀgg till ny applikation", ge applikationen ett namn och vÀlj dess typ
- Spara applikationens ID
Programvara
HÀr finns det redan frihet att vÀlja. Vissa anvÀnder Visual Studio, andra Rider, och vissa skriver kod i Vim (verkliga programmerare anvÀnder ju bara tangentbord, eller hur?). Men för att slippa implementera Discord API kan man anvÀnda det inofficiella biblioteket för C# "DSharpPlus". Det kan installeras antingen frÄn NuGet eller genom att bygga kÀllkoden frÄn repositoryt sjÀlv.
För dem som inte vet, eller har glömt, hur man installerar applikationer frÄn NuGet.Instruktion för Visual Studio
- Vi gĂ„r till fliken Projekt â Hantera NuGet-paket;
- Klicka pÄ BlÀddra och skriv "DSharpPlus" i sökfÀltet;
- VĂ€lj och installera ramverket;
- VINST!
Förberedelsefasen Àr avslutad, nu kan vi börja skriva boten.
Skriva logik

Vi kommer inte att gÄ igenom all logik i applikationen, jag ska bara visa hur man arbetar med meddelandefÄngst av boten och hur man jobbar med Wargaming API.
Arbetet med Discord-boten sker genom funktionen static async Task MainTask(string[] args);
För att anropa denna funktion mÄste du ange i Main
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();DÀrefter mÄste du initiera din bot:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); DÀr token Àr din bots token.
Sedan, genom en lambda, anger vi de nödvÀndiga kommandona som boten ska utföra:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(âHello, â + e.Author.Username);
}
};
DÀr e.Author.Username Àr hÀmtningen av anvÀndarnamnet.
SÄ nÀr du skickar ett meddelande som börjar med &, kommer boten att hÀlsa dig.
I slutet av denna funktion mÄste du ange await discord.ConnectAsync(); och await Task.Delay(-1);
Detta gör att kommandon kan köras i bakgrunden utan att blockera huvudtrÄden.
Nu mĂ„ste vi förstĂ„ Wargaming API. HĂ€r Ă€r allt enkelt â du skriver CURL-förfrĂ„gningar, fĂ„r svar i form av JSON-strĂ€ngar, extraherar de nödvĂ€ndiga uppgifterna och manipulerar med dem.
Exempel pÄ arbete med 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("Spelaren hittades inte");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Minst tre tecken krÀvs");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Ogiltig sökning");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Tomt smeknamn");
}
else
{
throw new Exception("NÄgot gick fel.");
}
}
return player;
}
Observera! Det rekommenderas starkt att inte lagra tokens och app-ID:n i öppen form! Minst av allt â Discord blockerar sĂ„dana tokens nĂ€r de kommer ut pĂ„ nĂ€tet, och i vĂ€rsta fall â kan botten börja anvĂ€ndas av illasinnade.
Distribuera pĂ„ VPS â server

NÀr du har avslutat botten, mÄste den placeras pÄ en server som alltid Àr igÄng 24/7. Detta beror pÄ att nÀr din applikation körs, körs ocksÄ botten. SÄ snart du stÀnger av applikationen, gÄr Àven din bot i vila.
Det finns mÄnga VPS-servrar i vÀrlden, bÄde pÄ Windows och Linux, men i de flesta fall Àr det betydligt billigare att hosta pÄ Linux.
PÄ Discord-servern rekommenderade de vscale.io, och jag skapade omedelbart en virtuell server dÀr pÄ Ubuntu och laddade upp botten. Jag kommer inte att gÄ in pÄ hur den hÀr webbplatsen fungerar, utan gÄ direkt till instÀllningarna för botten.
Först och frÀmst behöver du installera nödvÀndig programvara som kommer att köra vÄr bot skriven pÄ .NET Core. .
DĂ€refter behöver du ladda upp botten till en Git-tjĂ€nst, som GitHub eller liknande, och klona den pĂ„ VPS-servern, eller pĂ„ andra sĂ€tt ladda ner din bot. Observera att du endast kommer att ha en konsol, GUI kommer inte att finnas. Ăverhuvudtaget.
NÀr du har laddat ner din bot, behöver du starta den. För att göra detta behöver du:
- à terstÀlla alla beroenden: dotnet restore
- Bygga applikationen: dotnet build name_project.sln -c Release
- GĂ„ till den byggda DLL-filen;
- dotnet name_of_file.dll
Grattis! Din bot Àr igÄng. TyvÀrr upptar boten konsolen, och det Àr inte sÄ enkelt att lÀmna VPS-servern. Om servern startas om, mÄste boten startas igen. Det finns nÄgra lösningar pÄ detta. Alla Àr relaterade till att starta vid serverstart:
- LĂ€gg till skriptstart i /etc/init.d
- Skapa en tjÀnst som startas vid uppstart.
Jag ser ingen mening i att gÄ in pÄ detaljer, allt Àr tillrÀckligt vÀl beskrivet pÄ internet.
Slutsatser
Jag Àr glad att jag tog mig an den hÀr uppgiften. Det var min första erfarenhet av att utveckla en bot, och jag Àr glad att jag fick nya kunskaper om C# och att arbeta med Linux.
LĂ€nk till Discord-servern.
Tack för uppmÀrksamheten!
KĂ€lla: habr.com
