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

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

Përshëndetje, Habrvchanë!

Sot do të njihemi me një artikull, ku do të diskutohet se si të krijoni një bot, duke përdorur C# në .NET Core, dhe si ta vendosni atë në një server të dedikuar.

Artikulli do të përbëhet nga një histori përgatitore, faza përgatitore, shkrimi i logjikës dhe transferimi i botit në serverin e dedikuar.

Shpresoj se ky artikull do të ndihmojë shumë të sapo filluar.

Historia e mëparshme

E gjithë filloi në një natë pa gjumë vjeshte, të cilën e kalova në serverin Discord. Duke qenë se sapo isha bashkuar, fillova ta studioj atë thellësisht. Duke zbuluar kanalin e teksteve "Punësimet", u interesova, e hapëm atë dhe gjeta mes ofertave që nuk më interesonin, këtë:

«Programues (zhvillues boti)"
Kërkesat:

  • njohuri nĂ« gjuhĂ«t e programimit;
  • aftĂ«si pĂ«r vetĂ«-mĂ«sim.

Dëshira:

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

Detyrat:

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

Përfitimi juaj:

  • MundĂ«sia pĂ«r tĂ« mbĂ«shtetur dhe ndikuar nĂ« projektin qĂ« ju ka pĂ«lqyer;
  • Marrja e pĂ«rvojĂ«s nĂ« punĂ« ekipore;
  • MundĂ«sia pĂ«r tĂ« treguar dhe pĂ«rmirĂ«suar aftĂ«sitĂ« ekzistuese.»


Kjo më interesoi menjëherë. Po, për këtë punë nuk paguhej, por nuk kishte asnjë detyrim ndaj teje, dhe gjithashtu në portofol nuk do të ishte e tepërt. Prandaj, i shkrova administratorit të serverit dhe ai më kërkoi të shkruaja një bot që do të tregonte statistikën e lojtarit në World of Tanks.

Faza përgatitore

Krijimi i një boti në Discord me .NET Core dhe vendosja në server VPS
Discord
Para se të filloni të shkruani botin tonë, duhet ta krijoni atë për Discord. Ju nevojitet:

  1. Të hyni në llogarinë tuaj të Discord në lidhje
  2. Në skedën "Aplikacionet" kliko në butonin "Aplikacion i ri" dhe emërto boti
  3. Merrni token e botit, duke hyrë në botin tuaj dhe duke gjetur në listën "Cilësimet" skedën "Bot"
  4. Ruani ndonjëherë token

Wargaming

Gjithashtu, duhet të krijoni një aplikacion në Wargaming, për të marrë qasje në API Wargaming. Këtu gjithashtu është shumë e thjeshtë:

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

Software

Këtu tashmë ka liri zgjedhjeje. Disa përdorin Visual Studio, disa Rider, disa madje janë të avancuar dhe shkruajnë kod në Vim (për fat të keq, programuesit e vërtetë përdorin vetëm tastierën, apo jo?). Megjithatë, për të mos realizuar API-në e Discord, mund të përdorni një bibliotekë jozyrtare për C# "DSharpPlus". E mund ta instaloni ose nga NuGet, ose duke ndërtuar vetë burimet nga repository.

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

  1. Shkoni te skeda Projekt – Menaxhimi i paketave NuGet;
  2. Klikoni në shikimin e paketave dhe në fushën e kërkimit shkruani "DSharpPlus";
  3. Zgjidhni dhe instaloni framework-un;
  4. PROFIT!

Faza përgatitore ka përfunduar, tani mund të kaloni në shkrimin e bot-it.

Shkrimi i logjikës

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

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

Puna me bot-in e Discord-it ndodh 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 bot-in tuaj:

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

Ku token është token-i i bot-it tuaj.
Pastaj, përmes një lambde, shkruani komandat e nevojshme që boti duhet të kryejë:

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

Ku e.Author.Username është marrja e pseudonimit të 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ë lejojë ekzekutimin e komandave në sfond, pa zënë rrjedhën kryesore.

Tani duhet tĂ« merremi me Wargaming API. KĂ«tu Ă«shtĂ« e thjeshtĂ« – shkruani kĂ«rkesat CURL, merrni pĂ«rgjigje nĂ« formĂ«n e njĂ« JSON-i – varg, nxjerrni 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ërkohet të paktën tre simbole");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Kërkimi i pavlefshëm");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Emri i zbrazët");
                }
                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. Të paktën - Discord i ndalon këto tokene kur ato bien në internet, në maksimum - boti fillon të përdoret nga keqbërësit.

Deploy nĂ« VPS – server

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

Pas përfundimit me botin, është e nevojshme ta vendosni atë në një server që punon vazhdimisht 24/7. Kjo lidhet me faktin se kur aplikacioni juaj punon, boti gjithashtu punon. Sa herë që e ndizni aplikacionin, boti juaj bie në gjumë.

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

NĂ« serverin Discord, mĂ« rekomanduan vscale.io, dhe unĂ« menjĂ«herĂ« krijova atje njĂ« server virtual nĂ« Ubuntu dhe ngarkova botin. Nuk do tĂ« pĂ«rshkruaj si funksionon ky саĐčт, por do tĂ« kaloj drejtpĂ«rdrejt nĂ« konfigurimin e botit.

Së pari, ju nevojitet të instaloni softin e nevojshëm që do të ekzekutojë botin tonë, i shkruar në .NET Core. Si ta bëni këtë, është përshkruar këtu.

Më pas, ju nevojitet të ngarkoni botin në Git - një shërbim, si GitHub dhe të ngjashme dhe ta kloni në serverin VPS - ose, në mënyra të tjera, ta shkarkoni botin tuaj. Mbani parasysh se do të keni vetëm konsolë, GUI nuk do të jetë. Plotesisht.

Pasi keni shkarkuar bota tuaj, duhet ta aktivizoni atë. Për këtë, ju nevojitet:

  • Rivendosni tĂ« gjitha varĂ«sitĂ«: dotnet restore
  • NdĂ«rtoni aplikacionin: dotnet build name_project.sln -c Release
  • Shkoni te DLL e ndĂ«rtuar;
  • dotnet name_of_file.dll

Urime! Bota juaj Ă«shtĂ« aktivizuar. MegjithatĂ«, t'i dĂ«rgoni komandĂ«s dhe tĂ« dilni nga VPS – serveri nuk Ă«shtĂ« kaq e lehtĂ«. Po ashtu, nĂ« rast se serveri ribĂ«het, do tĂ« duhet ta aktivizoni pĂ«rsĂ«ri botĂ«n. Ka disa zgjidhje pĂ«r kĂ«tĂ« situatĂ«. TĂ« gjitha lidhen me aktivizimin gjatĂ« nisjes sĂ« serverit:

  • Shtoni aktivizimin e skenarit nĂ« /etc/init.d
  • Krijoni njĂ« shĂ«rbim qĂ« do tĂ« aktivizohet gjatĂ« nisjes.

Nuk e shoh të nevojshme të ndalem shumë te to, janë përshkruar mjaft mirë në internet.

Përfundimet

Jam i lumtur që e mora këtë detyrë. Ky ishte përvoja ime e parë në zhvillimin e një boti dhe jam i lumtur që fitova njohuri të reja mbi C# dhe punën me Linux.

Linku për serverin e Discord. Për ata që luajnë lojra Wargaming.
Linku për depot ku ndodhet boti i Discord.
Linku për depot DSharpPlus.
Faleminderit për vëmendjen!

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster