Kreiranje Discord bota na .NET Core sa implementacijom na VPS server

Kreiranje Discord bota na .NET Core sa implementacijom na VPS server

Zdravo Khabrovci!

Danas ćete vidjeti članak koji će vam pokazati kako da kreirate bota koristeći C# na .NET Core i kako ga pokrenuti na udaljenom serveru.

Članak će se sastojati od pozadine, pripremne faze, pisanja logike i prijenosa bota na udaljeni server.

Nadam se da će ovaj članak pomoći mnogim početnicima.

prapovijest

Sve je počelo jedne neprospavane jesenje noći koju sam proveo na Discord serveru. Pošto sam mu se nedavno pridružio, počeo sam da ga proučavam odozgo do dole. Pronašavši tekstualni kanal "Spoljna radna mjesta", zainteresirao sam se, otvorio ga i među ponudama koje me nisu zanimale pronašao:

"Programer (programer botova)
Uslovi:

  • poznavanje programskih jezika;
  • sposobnost za samoučenje.

Želje:

  • sposobnost razumijevanja koda drugih ljudi;
  • poznavanje DISCORD funkcionalnosti.

Zadaci:

  • razvoj botova;
  • podrška i održavanje bota.

Vaša prednost:

  • Mogućnost da podržite i utičete na projekat koji vam se sviđa;
  • Sticanje iskustva u timskom radu;
  • Prilika za demonstraciju i unapređenje postojećih vještina.


Ovo me odmah zainteresovalo. Da, nisu platili za ovaj posao, ali od vas nisu tražili nikakve obaveze i neće biti suvišno u portfelju. Stoga sam pisao administratoru servera, a on me zamolio da napišem bota koji će prikazati statistiku igrača u World of Tanks.

Pripremna faza

Kreiranje Discord bota na .NET Core sa implementacijom na VPS server
Discrod
Prije nego počnemo pisati našeg bota, moramo ga kreirati za Discord. Ti trebas:

  1. Prijavite se na Discord nalog link
  2. Na kartici "Aplikacije" kliknite na dugme "Nova aplikacija" i imenujte bot
  3. Nabavite bot token tako što ćete se prijaviti na svog bota i pronaći karticu "Bot" na listi "Postavke"
  4. Sačuvajte token negdje

Wargaming

Također, morate kreirati aplikaciju u Wargamingu da biste dobili pristup Wargaming API-ju. I ovdje je sve jednostavno:

  1. Prijavite se na svoj Wargaming nalog putem ovog linka
  2. Idemo na "Moje aplikacije" i kliknemo na dugme "Dodaj novu aplikaciju", dajući naziv aplikacije i odabir njene vrste
  3. Čuvanje ID-a aplikacije

softver

Već postoji sloboda izbora. Neko koristi Visual Studio, neko Rider, neko je generalno moćan i piše kod u Vimu (na kraju krajeva, pravi programeri koriste samo tastaturu, zar ne?). Međutim, kako ne biste implementirali Discord API, možete koristiti neslužbenu C# biblioteku “DSharpPlus”. Možete ga instalirati ili iz NuGet-a ili tako što ćete sami izraditi izvore iz spremišta.

Za one koji ne znaju ili su zaboravili kako instalirati aplikacije iz NuGet-a.Uputstva za Visual Studio

  1. Idite na karticu Projekat - Upravljanje NuGet paketima;
  2. Kliknite na recenziju i u polje za pretragu unesite “DSharpPlus”;
  3. Odaberite i instalirajte okvir;
  4. PROFIT!

Pripremna faza je završena, možete nastaviti sa pisanjem bota.

Logika pisanja

Kreiranje Discord bota na .NET Core sa implementacijom na VPS server

Nećemo razmatrati cjelokupnu logiku aplikacije, samo ću pokazati kako raditi s presretanjem poruka od strane bota i kako raditi sa Wargaming API-jem.

Rad sa Discord botom odvija se kroz statički asinhronizirani zadatak MainTask(string[] args);
Da biste pozvali ovu funkciju, morate se registrovati u glavnom

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Zatim morate inicijalizirati svog bota:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

Gdje je token token vašeg bota.
Zatim, kroz lambda, pišemo potrebne komande koje bot treba da izvrši:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
    }
};

Gdje e.Author.Username dobija nadimak korisnika.

Na ovaj način, kada pošaljete bilo koju poruku koja počinje sa &, bot će vas pozdraviti.

Na kraju ove funkcije morate napisati await discord.ConnectAsync(); i čekati Task.Delay(-1);

Ovo će vam omogućiti da izvršavate komande u pozadini bez preuzimanja glavne niti.

Sada se moramo pozabaviti Wargaming API-jem. Ovdje je sve jednostavno - napišite CURL zahtjeve, dobijete odgovor u obliku JSON niza, izvucite potrebne podatke odatle i izvršite manipulacije na njima.

Primjer rada sa WargamingAPI-jem

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;
        }

Pažnja! Strogo se ne preporučuje pohranjivanje svih tokena i ID-ova aplikacija u čistom tekstu! U najmanju ruku, Discord zabranjuje takve tokene kada uđu u svjetsku mrežu, a u maksimumu napadači počinju koristiti bot.

Postavite na VPS - server

Kreiranje Discord bota na .NET Core sa implementacijom na VPS server

Kada završite sa botom, on mora biti hostovan na serveru koji stalno radi 24/7. To je zbog činjenice da kada je vaša aplikacija pokrenuta, radi i bot. Čim isključite aplikaciju, i vaš bot zaspi.

Mnogi VPS serveri postoje na ovom svijetu, kako na Windows-u tako i na Linuxu, međutim, u većini slučajeva, mnogo je jeftinije hostirati na Linuxu.

Na Discord serveru su mi savjetovali vscale.io i odmah sam kreirao virtuelni server na Ubuntu na njemu i uploadovao bota. Neću opisivati ​​kako ova stranica radi, već ću ići direktno na postavke bota.

Prije svega, potrebno je da instalirate potreban softver koji će pokrenuti našeg bota napisan u .NET Core. Kako to učiniti je opisano ovdje.

Zatim morate otpremiti bota na Git servis, kao što je GitHub i slično, i klonirati ga na VPS server ili preuzeti svog bota na druge načine. Imajte na umu da ćete imati samo konzolu, bez GUI. Uopšte.

Nakon što preuzmete svog bota, morate ga pokrenuti. Za ovo vam je potrebno:

  • Vrati sve zavisnosti: dotnet restauracija
  • Izrada aplikacije: dotnet build name_project.sln -c Izdanje
  • Idite na ugrađeni DLL;
  • dotnet name_of_file.dll

Čestitamo! Vaš bot radi. Međutim, bot, nažalost, zauzima konzolu i nije lako izaći sa VPS servera. Takođe, u slučaju ponovnog pokretanja servera, moraćete da pokrenete bota na novi način. Postoji nekoliko izlaza iz situacije. Sve se odnose na pokretanje pri pokretanju servera:

  • Dodajte skriptu za pokretanje u /etc/init.d
  • Kreirajte servis koji će se pokrenuti pri pokretanju.

Ne vidim smisao da se detaljnije zadržavam na njima, sve je dovoljno detaljno opisano na internetu.

nalazi

Drago mi je što sam prihvatio ovaj zadatak. Ovo je bilo moje prvo iskustvo u razvoju botova i drago mi je što sam stekao nova znanja u C#-u i radu sa Linuxom.

Link na Discord server. Za one koji igraju Wargaming igrice.
Link do spremišta u kojem se nalazi Discord bot.
Veza do DSharpPlus spremišta.
Spasibo za vnimanie!

izvor: www.habr.com

Dodajte komentar