ProHoster > Log > administrasjon > Opprette en Discord-bot på .NET Core med distribusjon til en VPS-server
Opprette en Discord-bot på .NET Core med distribusjon til en VPS-server
Hei Khabroviter!
I dag vil du se en artikkel som viser deg hvordan du lager en bot ved hjelp av C# på .NET Core og hvordan du kjører den på en ekstern server.
Artikkelen vil bestå av en bakgrunn, et forberedende stadium, skrivelogikk og overføring av boten til en ekstern server.
Jeg håper denne artikkelen vil hjelpe mange nybegynnere.
forhistorie
Det hele startet på en søvnløs høstnatt jeg tilbrakte på Discord-serveren. Siden jeg nylig ble med ham, begynte jeg å studere ham opp og ned. Etter å ha funnet tekstkanalen "Ledige stillinger", ble jeg interessert, åpnet den og fant blant tilbudene som ikke interesserte meg, disse er:
"Programmer (botutvikler) krav:
kunnskap om programmeringsspråk;
evne til selvlæring.
Пожелания:
evne til å forstå andres kode;
kunnskap om DISCORD-funksjonalitet.
mål:
bot utvikling;
støtte og vedlikehold av boten.
Din fordel:
Mulighet til å støtte og påvirke prosjektet du liker;
Få erfaring med å jobbe i team;
Mulighet til å demonstrere og forbedre eksisterende ferdigheter.
Dette interesserte meg umiddelbart. Ja, de betalte ikke for dette arbeidet, men de krevde ingen forpliktelser fra deg, og det vil ikke være overflødig i porteføljen. Derfor skrev jeg til serveradministratoren, og han ba meg skrive en bot som vil vise spillerens statistikk i World of Tanks.
Forberedelsesfasen
Discrod
Før vi begynner å skrive boten vår, må vi lage den for Discord. Du trenger:
Vi går til "Mine applikasjoner" og klikker på knappen "Legg til en ny applikasjon", oppgir navnet på applikasjonen og velger dens type
Lagrer applikasjons-ID
Software
Det er allerede valgfrihet. Noen bruker Visual Studio, noen Rider, noen er generelt kraftige, og skriver kode i Vim (tross alt bruker ekte programmerere bare tastaturet, ikke sant?). For ikke å implementere Discord API, kan du imidlertid bruke det uoffisielle C#-biblioteket "DSharpPlus". Du kan installere det enten fra NuGet, eller ved å bygge kildene selv fra depotet.
For de som ikke vet eller har glemt hvordan man installerer applikasjoner fra NuGet.Instruksjoner for Visual Studio
Gå til fanen Prosjekt - Administrer NuGet-pakker;
Klikk på anmeldelsen og skriv inn "DSharpPlus" i søkefeltet;
Velg og installer rammeverk;
PROFITT!
Den forberedende fasen er over, du kan fortsette å skrive boten.
Skrivelogikk
Vi vil ikke vurdere hele logikken til applikasjonen, jeg vil bare vise hvordan man jobber med avskjæring av meldinger av boten, og hvordan man jobber med Wargaming API.
Arbeid med Discord-roboten skjer gjennom den statiske asynkrone Task MainTask(streng[] args);
For å kalle denne funksjonen må du registrere deg i Main
Hvor token er botens token.
Deretter, gjennom lambdaen, skriver vi de nødvendige kommandoene som boten skal utføre:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Hvor e.Author.Username får brukerens kallenavn.
På denne måten, når du sender en melding som begynner med &, vil boten hilse på deg.
På slutten av denne funksjonen må du skrive await discord.ConnectAsync(); og avvent Task.Delay(-1);
Dette vil tillate deg å utføre kommandoer i bakgrunnen uten å ta opp hovedtråden.
Nå må vi håndtere Wargaming API. Alt er enkelt her - skriv CURL-forespørsler, få et svar i form av en JSON-streng, trekk ut de nødvendige dataene derfra og utfør manipulasjoner på dem.
Et eksempel på arbeid 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("Игрок не найден");
}
}
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;
}
Merk følgende! Det er strengt tatt ikke anbefalt å lagre alle tokens og applikasjons-IDer i klartekst! Som et minimum forbyr Discord slike tokens når de kommer inn i det verdensomspennende nettverket, og som et maksimum begynner boten å bli brukt av angripere.
Distribuer til VPS - server
Når du er ferdig med boten, må den ligge på en server som hele tiden kjører 24/7. Dette skyldes det faktum at når applikasjonen din kjører, kjører også boten. Så snart du slår av applikasjonen, sovner roboten din også.
Mange VPS-servere finnes i denne verden, både på Windows og på Linux, men i de fleste tilfeller er det mye billigere å hoste på Linux.
På Discord-serveren ble jeg informert om vscale.io, og jeg opprettet umiddelbart en virtuell server på Ubuntu på den og lastet opp boten. Jeg vil ikke beskrive hvordan denne siden fungerer, men vil gå rett til bot-innstillingene.
Deretter må du laste opp boten til en Git-tjeneste, som GitHub og lignende, og klone den til en VPS-server, eller laste ned boten din på andre måter. Vær oppmerksom på at du bare vil ha en konsoll, ingen GUI. I det hele tatt.
Etter at du har lastet ned boten din, må du kjøre den. For dette trenger du:
Gjenopprett alle avhengigheter: dotnet gjenoppretting
Gratulerer! Boten din kjører. Imidlertid okkuperer boten dessverre konsollen, og det er ikke lett å gå ut av VPS-serveren. Også, i tilfelle en server omstart, må du starte boten på en ny måte. Det er et par veier ut av situasjonen. Alle er relatert til lanseringen ved serveroppstart:
Legg til kjøreskript til /etc/init.d
Opprett en tjeneste som vil kjøre ved oppstart.
Jeg ser ikke poenget med å dvele ved dem i detalj, alt er beskrevet i tilstrekkelig detalj på Internett.
Funn
Jeg er glad jeg tok på meg denne oppgaven. Dette var min første erfaring med botutvikling, og jeg er glad for at jeg fikk ny kunnskap i C #, og arbeidet med Linux.