ProHoster > Blog > administration > Oprettelse af en Discord-bot på .NET Core med udrulning til en VPS-server
Oprettelse af en Discord-bot på .NET Core med udrulning til en VPS-server
Hej Khabrovites!
I dag vil du se en artikel, der viser dig, hvordan du opretter en bot ved hjælp af C# på .NET Core, og hvordan du kører den på en fjernserver.
Artiklen vil bestå af en baggrund, et forberedende trin, skrivelogik og overførsel af botten til en ekstern server.
Jeg håber, at denne artikel vil hjælpe mange begyndere.
forhistorie
Det hele startede på en søvnløs efterårsnat, som jeg tilbragte på Discord-serveren. Siden jeg for nylig sluttede mig til ham, begyndte jeg at studere ham op og ned. Efter at have fundet tekstkanalen "Ledige stillinger", blev jeg interesseret, åbnede den og fandt blandt de tilbud, der ikke interesserede mig, disse er:
"Programmer (botudvikler) Krav:
kendskab til programmeringssprog;
evne til selvlæring.
Ønsker:
evne til at forstå andres kode;
kendskab til DISCORD funktionalitet.
mål:
bot udvikling;
support og vedligeholdelse af botten.
Din fordel:
Mulighed for at støtte og påvirke det projekt, du kan lide;
Få erfaring med at arbejde i et team;
Mulighed for at demonstrere og forbedre eksisterende færdigheder.
Dette interesserede mig straks. Ja, de har ikke betalt for dette arbejde, men de krævede ingen forpligtelser fra dig, og det vil ikke være overflødigt i porteføljen. Derfor skrev jeg til serveradministratoren, og han bad mig skrive en bot, der vil vise spillerens statistik i World of Tanks.
Den forberedende fase
Diskod
Før vi begynder at skrive vores bot, skal vi oprette den til Discord. Du mangler:
Vi går til "Mine applikationer" og klikker på knappen "Tilføj en ny applikation", giver navnet på applikationen og vælger dens type
Gemmer applikations-id'et
Software
Der er allerede valgfrihed. Nogen bruger Visual Studio, nogen Rider, nogen er generelt magtfulde og skriver kode i Vim (rigtige programmører bruger trods alt kun tastaturet, ikke?). Men for ikke at implementere Discord API, kan du bruge det uofficielle C#-bibliotek "DSharpPlus". Du kan installere det enten fra NuGet eller ved at bygge kilderne selv fra depotet.
For dem, der ikke ved eller har glemt, hvordan man installerer programmer fra NuGet.Instruktioner til Visual Studio
Gå til fanen Projekt - Administrer NuGet-pakker;
Klik på anmeldelsen og indtast "DSharpPlus" i søgefeltet;
Vælg og installer framework;
PROFIT!
Den forberedende fase er forbi, du kan fortsætte med at skrive botten.
Skrivelogik
Vi vil ikke overveje hele applikationens logik, jeg vil kun vise, hvordan man arbejder med aflytning af beskeder af botten, og hvordan man arbejder med Wargaming API.
Arbejdet med Discord-botten foregår gennem den statiske async Task MainTask(streng[] args);
For at kalde denne funktion skal du registrere dig i Main
Hvor token er din bots token.
Derefter skriver vi gennem lambdaen de nødvendige kommandoer, som botten skal udfø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 brugerens kaldenavn.
På denne måde, når du sender en besked, der starter med &, vil botten hilse på dig.
I slutningen af denne funktion skal du skrive await discord.ConnectAsync(); og afvent Task.Delay(-1);
Dette giver dig mulighed for at udføre kommandoer i baggrunden uden at tage hovedtråden op.
Nu skal vi beskæftige os med Wargaming API. Alt er enkelt her - skriv CURL-anmodninger, få et svar i form af en JSON-streng, træk de nødvendige data ud derfra og udfør manipulationer på dem.
Et eksempel på arbejde 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;
}
Opmærksomhed! Det anbefales strengt ikke at gemme alle tokens og applikations-id'er i klar tekst! Som minimum forbyder Discord sådanne tokens, når de kommer ind på det verdensomspændende netværk, og som et maksimum begynder botten at blive brugt af angribere.
Implementer til VPS - server
Når du er færdig med botten, skal den hostes på en server, der konstant kører 24/7. Dette skyldes det faktum, at når din applikation kører, kører botten også. Så snart du slukker applikationen, falder din bot også i søvn.
Mange VPS-servere findes i denne verden, både på Windows og på Linux, men i de fleste tilfælde er det meget billigere at hoste på Linux.
På Discord-serveren blev jeg anbefalet vscale.io, og jeg oprettede straks en virtuel server på Ubuntu på den og uploadede botten. Jeg vil ikke beskrive, hvordan dette websted fungerer, men vil gå direkte til bot-indstillingerne.
Dernæst skal du uploade botten til en Git-tjeneste, som GitHub og lignende, og klone den til en VPS-server eller downloade din bot på andre måder. Bemærk venligst, at du kun vil have en konsol, ingen GUI. Overhovedet.
Når du har downloadet din bot, skal du køre den. Til dette har du brug for:
Tillykke! Din bot kører. Men botten optager desværre konsollen, og det er ikke let at forlade VPS-serveren. I tilfælde af en servergenstart skal du også starte botten på en ny måde. Der er et par veje ud af situationen. Alle er relateret til lanceringen ved serverstart:
Tilføj run script til /etc/init.d
Opret en tjeneste, der kører ved opstart.
Jeg kan ikke se meningen med at dvæle ved dem i detaljer, alt er beskrevet tilstrækkeligt detaljeret på internettet.
Fund
Jeg er glad for, at jeg påtog mig denne opgave. Dette var min første erfaring med botudvikling, og jeg er glad for, at jeg fik ny viden i C # og arbejde med Linux.