Krijimi i një boti Discord në .NET Core me depolimin në server VPS

Krijimi i një boti Discord në .NET Core me depolimin në server VPS

Përshëndetje, Habrovchanë!

Sot do të njiheni me një artikull, në të cilin do të flitet për mënyrën se si të krijoni një bot, duke përdorur C# në .NET Core, dhe se si ta vendosni atë në një server të jashtëm.

Artikulli do të përbëhet nga një histori të shkuarës, një fazë përgatitore, shkruajta e logjikës dhe transferimi i botit në serverin e jashtëm.

Shpresoj se ky artikull do të ndihmojë shumë fillestarë.

Pas historia

I gjithë kjo filloi një natë pa gjumë vjeshtor, që e kalova në serverin Discord. Ndërsa sapo isha bashkuar dhe po e shikoja atë në detaje, zbulova kanalin tekstual "Vakansat" dhe u interesova, e hap atë, dhe mes ofertave që nuk më interesonin, gjetëm këtë:

"Programues (zhvillues i botëve)"
Kërkesat:

  • dije tĂ« gjuhĂ«ve tĂ« programimit;
  • aftĂ«si pĂ«r tĂ« mĂ«suar vetĂ«.

Dëshira:

  • aftĂ«si pĂ«r tĂ« kuptuar kodin e tĂ« tjerĂ«ve;
  • njohuri mbi funksionalitetin e DISCORD.

Detyrat:

  • zhvillimi i botit;
  • mbĂ«shtetje dhe shoqĂ«rim tĂ« punĂ«s sĂ« botit.

Përfitimi juaj:

  • MundĂ«sia pĂ«r tĂ« mbĂ«shtetur dhe ndikuar nĂ« njĂ« projekt qĂ« ju pĂ«lqen;
  • Fitimi i pĂ«rvojĂ«s nĂ« punĂ«n nĂ« ekip;
  • MundĂ«sia pĂ«r tĂ« demonstruar dhe pĂ«rmirĂ«suar aftĂ«sitĂ« ekzistuese.


Kjo më interesoi menjëherë. Po, për këtë punë nuk u pagua, por nuk kishte kërkesa prej teje, madje do të ishte një plus në portofolin tim. Prandaj, i shkrova administratorit të serverit, dhe ai më kërkoi të krijoja një bot që do të tregonte statistikën e lojtarit në World of Tanks.

Faza përgatitore

Krijimi i një boti Discord në .NET Core me depolimin në server VPS
Discrod
Para se të filloni shkrimin e botit tonë, duhet ta krijoni atë për Discord. Ju nevojitet:

  1. Të hyni në llogarinë tuaj Discord në lidhje
  2. Në skedën "Applications" klikoni në butonin "New Application" dhe emërtoni botin
  3. Merrni token-in e botit, duke hyrë në botin tuaj dhe duke gjetur në listën "Settings" skedën "Bot"
  4. Ruani diku token-in

Wargaming

Po ashtu, duhet të krijoni një aplikacion në Wargaming për të pasur qasje në API-në e Wargaming. Këtu gjithashtu është e thjeshtë:

  1. Hyni në llogarinë tuaj Wargaming në këtë lidhje
  2. Hyni në "Aplikacionet e mia" dhe klikoni në butonin "Shto aplikacion të ri", jepni emrin e aplikacionit dhe zgjidhni tipin e tij
  3. Ruani ID-në e aplikacionit

Softueri

KĂ«tu ka liri zgjedhjeje. Disa pĂ«rdorin Visual Studio, disa Rider, dhe disa madje shkruajnĂ« kod nĂ« Vim (nĂ« fund tĂ« fundit, programuesit e vĂ«rtetĂ« pĂ«rdorin vetĂ«m tastierĂ«n, apo jo?). MegjithatĂ«, pĂ«r tĂ« mos implementuar Discord API, mund tĂ« pĂ«rdorni njĂ« bibliotekĂ« jozyrtare pĂ«r C# “DSharpPlus”. Mund ta instaloni ose nga NuGet, ose duke e ndĂ«rtuar vetĂ« nga burimet nĂ« depo.

Për ata që nuk e dinë, ose e kanë harruar, si të instaloni aplikacione nga NuGet.Udhëzimi për Visual Studio

  1. Shkoni te seksioni Projekt – Menaxhimi i paketave NuGet;
  2. Klikoni mbi shikimin dhe nĂ« fushĂ«n e kĂ«rkimit shkruani “DSharpPlus”;
  3. Zgjidhni dhe instaloni framework-un;
  4. PROFIT!

Faza përgatitore ka përfunduar, mund të kaloni në shkruhjen e botit.

Shkruajtja e logjikës

Krijimi i një boti Discord në .NET Core me depolimin në server VPS

Nuk do të shqyrtojmë të gjithë logjikën e aplikacionit, do të tregoj vetëm se si të punoni me kapjen e mesazheve nga boti, dhe si të punoni me Wargaming API.

Puna me botin e Discord bëhet përmes funksionit static async Task MainTask(string[] args);
Për të thirrur këtë funksion, në Main duhet të shkruani

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

Më pas, ju duhet të inicializoni botin tuaj:

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

Ku i token – Ă«shtĂ« token-i i botit tuaj.
Më pas, përmes një lambda, shkruani komandat e nevojshme që duhet të ekzekutojë boti:

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

Ku e.Author.Username – merrni nick-nemin e pĂ«rdoruesit.

Kështu, kur të dërgoni çdo mesazh që fillon me &, boti do t'ju përshëndesë.

Në fund të kësaj funksioni, duhet të shkruani await discord.ConnectAsync(); dhe await Task.Delay(-1);

Kjo do t'i lejojë të ekzekutojë komandat në sfond, pa zënë shkallën kryesore.

Tani Ă«shtĂ« e nevojshme tĂ« merret me Wargaming API. KĂ«tu Ă«shtĂ« e thjeshtĂ« – shkruani kĂ«rkesa CURL, merrni njĂ« pĂ«rgjigje nĂ« formĂ« JSON – vargje, nxirrni tĂ« dhĂ«nat e nevojshme dhe bĂ«ni manipulime mbi to.

Shembulli i punës me 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("Lojtari nuk u gjet");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Kërkesa kërkon të paktën tre shkronja");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Kërkimi është i pavlefshëm");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Emri është bosh");
                }
                else
                {
                    throw new Exception("Diçka shkoi keq.");
                }
            }

            return player;
        }

Kujdes! Ruajtja e tĂ« gjitha tokeneve dhe ID-ve tĂ« aplikacioneve nĂ« mĂ«nyrĂ« tĂ« hapur nuk rekomandohet kurrsesi! Si tĂ« paktĂ«n – Discord ndalon kĂ«to tokene kur ato bien nĂ« rrjetin botĂ«ror, si maksimum – boti fillon tĂ« pĂ«rdoret nga keqbĂ«rĂ«sit.

Deploy nĂ« VPS – server

Krijimi i një boti Discord në .NET Core me depolimin në server VPS

Pasi të keni përfunduar me botin, duhet ta vendosni në një server që funksionon 24/7. Kjo është për shkak se kur aplikacioni juaj funksionon, boti gjithashtu funksionon. Sapo të fikni aplikacionin, boti juaj gjithashtu fle.

Ka shumë serverë VPS në këtë botë, si në Windows ashtu edhe në Linux, por në shumicën e rasteve, është shumë më lirë të vendosni në Linux.

Në serverin Discord më rekomanduan vscale.io, dhe menjëherë krijova atje një server virtual në Ubuntu dhe ngarkova botin. Nuk do të përshkruaj se si funksionon ky website, por do të kaloj direkt në konfigurimin e botit.

E para, ju nevojitet tĂ« instaloni softin e nevojshĂ«m qĂ« do tĂ« запусĐșа naĆĄ boti, i shkruar nĂ« .NET Core. Si ta bĂ«ni kĂ«tĂ«, Ă«shtĂ« pĂ«rshkruar kĂ«tu.

MĂ« pas, ju nevojitet tĂ« ngarkoni robotin nĂ« Git – njĂ« shĂ«rbim si GitHub dhe tĂ« ngjashme dhe tĂ« klononi nĂ« VPS – serverin, ose, me rrugĂ« tĂ« tjera tĂ« shkarkoni robotin tuaj. Mbani mend se do tĂ« keni vetĂ«m konzolĂ«, GUI nuk do tĂ« jetĂ« i pranishĂ«m. Aspak.

Pas shkarkimit të robotit tuaj, ju nevojitet ta nisni atë. Për këtë, ju nevojitet:

  • TĂ« riktheheni tĂ« gjitha varĂ«sitĂ«: dotnet restore
  • TĂ« ndĂ«rtoni aplikacionin: dotnet build name_project.sln -c Release
  • TĂ« kaloni nĂ« DLL-nĂ« e ndĂ«rtuar;
  • dotnet name_of_file.dll

Urime! Robotin tuaj Ă«shtĂ« nisur. MegjithatĂ«, robotin fatkeqĂ«sisht e zĂ« konzola, dhe tĂ« dalĂ«sh nga VPS – serveri nuk do tĂ« jetĂ« aq e lehtĂ«. Po ashtu, nĂ« rast rikthimi tĂ« serverit, do tĂ« duhet ta nisni pĂ«rsĂ«ri robotin. KĂ«tu ka disa zgjidhje. TĂ« gjitha lidhen me nisjen gjatĂ« fillimit tĂ« serverit:

  • Shto nisjen e skriptit nĂ« /etc/init.d
  • Krijo njĂ« shĂ«rbim, i cili do tĂ« nisĂ« gjatĂ« fillimit.

Nuk e shoh të nevojshme të qëndroj shumë mbi to, është përshkruar mjaft detajisht në internet.

Përfundimet

Jam i lumtur që kam marrë këtë detyrë. Ishte eksperienca ime e parë në zhvillimin e një roboti dhe jam i lumtur që kam fituar njohuri të reja mbi C# dhe punën me Linux.

Linku në serverin Discord. Për ata që luajnë lojra Wargaming.
Linku në depozitën ku ndodhet robotin Discord.
Linku në repository-në DSharpPlus.
Faleminderit për vëmendjen!

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster