Paghimo og Discord bot sa .NET Core nga adunay deployment sa VPS server

Paghimo og Discord bot sa .NET Core nga adunay deployment sa VPS server

Hello mga Khabrovites!

Karon makakita ka og artikulo nga magpakita kanimo unsaon paghimo og bot gamit ang C# sa .NET Core ug unsaon kini pagpadagan sa remote server.

Ang artikulo maglangkob sa usa ka background, usa ka yugto sa pagpangandam, pagsulat sa lohika ug pagbalhin sa bot sa usa ka hilit nga server.

Nanghinaut ko nga kini nga artikulo makatabang sa daghang mga nagsugod.

sa naunang kasaysayan

Nagsugod ang tanan sa usa ka walay tulog nga gabii sa tingdagdag nga akong gigugol sa usa ka server sa Discord. Sukad nga bag-o pa ko nga miapil kaniya, nagsugod ako sa pagtuon kaniya sa taas ug ubos. Kay nakit-an ang text channel nga "Vacancies", nahimo kong interesado, giablihan kini, ug nakit-an taliwala sa mga tanyag nga dili interesado kanako, kini mao ang:

"Programmer (bot developer)
Mga kinahanglanon:

  • kahibalo sa programming language;
  • abilidad sa pagkat-on sa kaugalingon.

Nangandoy:

  • abilidad sa pagsabut sa code sa ubang mga tawo;
  • kahibalo sa DISCORD functionality.

Mga buluhaton:

  • pagpalambo sa bot;
  • suporta ug pagmentinar sa bot.

Ang imong kaayohan:

  • Oportunidad sa pagsuporta ug pag-impluwensya sa proyekto nga imong gusto;
  • Pagbaton og kasinatian sa pagtrabaho sa usa ka team;
  • Oportunidad sa pagpakita ug pagpalambo sa kasamtangan nga mga kahanas.


Nakainteres dayon kini kanako. Oo, wala sila mobayad niini nga trabaho, apan wala sila mangayo og bisan unsa nga obligasyon gikan kanimo, ug dili kini sobra sa portfolio. Busa, nagsulat ako sa admin sa server, ug gihangyo niya ako sa pagsulat sa usa ka bot nga magpakita sa mga istatistika sa magdudula sa World of Tanks.

Pag-andam sa entablado

Paghimo og Discord bot sa .NET Core nga adunay deployment sa VPS server
Discrod
Sa dili pa kami magsugod sa pagsulat sa among bot, kinahanglan namon nga buhaton kini alang sa Discord. Kinahanglan nimo:

  1. Pag-login sa Discord account link
  2. Sa tab nga "Applications", i-klik ang "Bag-ong Aplikasyon" nga buton ug nganli ang bot
  3. Pagkuha usa ka token sa bot pinaagi sa pag-log in sa imong bot ug pagpangita sa tab nga "Bot" sa lista sa "Mga Setting".
  4. I-save ang token sa usa ka dapit

Wargaming

Usab, kinahanglan ka nga maghimo usa ka aplikasyon sa Wargaming aron makakuha og access sa Wargaming API. Dinhi, usab, ang tanan yano ra:

  1. Login sa imong Wargaming account pinaagi niini nga link
  2. Moadto kami sa "Akong Mga Aplikasyon" ug i-klik ang "Pagdugang usa ka bag-ong aplikasyon" nga buton, paghatag sa ngalan sa aplikasyon ug pagpili sa tipo niini
  3. Pag-save sa Application ID

software

Naa nay kagawasan sa pagpili. Adunay usa nga naggamit sa Visual Studio, usa ka Rider, usa ka tawo sa kasagaran gamhanan, ug nagsulat sa code sa Vim (pagkahuman, ang tinuod nga mga programmer naggamit lamang sa keyboard, di ba?). Bisan pa, aron dili ipatuman ang Discord API, mahimo nimong gamiton ang dili opisyal nga C# library nga "DSharpPlus". Mahimo nimo kini i-install gikan sa NuGet, o pinaagi sa paghimo sa mga gigikanan sa imong kaugalingon gikan sa repository.

Para sa mga wala kahibalo o nakalimot unsaon pag-install ug mga aplikasyon gikan sa NuGet.Mga panudlo alang sa Visual Studio

  1. Adto sa tab Project - Manage NuGet Packages;
  2. I-klik ang review ug sa search field isulod ang "DSharpPlus";
  3. Pagpili ug pag-instalar sa framework;
  4. PABILIN!

Ang yugto sa pagpangandam nahuman na, mahimo nimong ipadayon ang pagsulat sa bot.

Pagsulat lohika

Paghimo og Discord bot sa .NET Core nga adunay deployment sa VPS server

Dili namon tagdon ang tibuuk nga lohika sa aplikasyon, ipakita ra nako kung giunsa ang pagtrabaho sa interception sa mga mensahe sa bot, ug kung giunsa ang pagtrabaho kauban ang Wargaming API.

Ang pagtrabaho sa Discord bot mahitabo pinaagi sa static async nga Task MainTask(string[] args);
Aron matawag kini nga function, sa Main kinahanglan nimo nga magparehistro

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

Sunod, kinahanglan nimo nga sugdan ang imong bot:

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

Asa token ang token sa imong bot.
Dayon, pinaagi sa lambda, gisulat namo ang gikinahanglan nga mga sugo nga kinahanglang ipatuman sa bot:

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

Diin ang e.Author.Username nagkuha sa nickname sa user.

Niining paagiha, kung magpadala ka bisan unsang mensahe nga nagsugod sa &, ang bot motimbaya kanimo.

Sa katapusan niini nga function, kamo kinahanglan gayud nga magsulat naghulat discord.ConnectAsync(); ug maghulat sa Buluhaton.Paglangan(-1);

Kini magtugot kanimo sa pagpatuman sa mga sugo sa background nga walay pagkuha sa main thread.

Karon kinahanglan namong atubangon ang Wargaming API. Ang tanan yano dinhi - isulat ang mga hangyo sa CURL, pagkuha usa ka tubag sa porma sa usa ka string sa JSON, kuhaa ang kinahanglan nga datos gikan didto ug paghimo mga manipulasyon sa kanila.

Usa ka pananglitan sa pagtrabaho kauban ang 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;
        }

Atensyon! Dili gyud girekomenda nga tipigan ang tanan nga mga token ug mga ID sa aplikasyon sa tin-aw nga teksto! Sa labing gamay, ang Discord nagdili sa ingon nga mga token kung sila mosulod sa tibuuk kalibutan nga network, ug sa labing kadaghan, ang bot nagsugod nga gigamit sa mga tig-atake.

I-deploy sa VPS - server

Paghimo og Discord bot sa .NET Core nga adunay deployment sa VPS server

Kung nahuman na nimo ang bot, kinahanglan nga i-host kini sa usa ka server nga kanunay nga nagdagan 24/7. Kini tungod sa kamatuoran nga kung ang imong aplikasyon nagdagan, ang bot nagdagan usab. Sa diha nga imong gipalong ang aplikasyon, ang imong bot makatulog usab.

Daghang mga server sa VPS ang naglungtad niini nga kalibutan, sa Windows ug sa Linux, bisan pa, sa kadaghanan nga mga kaso, mas barato ang pag-host sa Linux.

Sa Discord server, ako gitambagan vscale.io, ug ako diha-diha dayon naghimo sa usa ka virtual server sa Ubuntu niini ug gi-upload ang bot. Dili nako ihulagway kung giunsa kini nga site molihok, apan diretso sa mga setting sa bot.

Una sa tanan, kinahanglan nimo nga i-install ang gikinahanglan nga software nga modagan sa among bot nga gisulat sa .NET Core. Giunsa kini buhaton gihulagway dinhi.

Sunod, kinahanglan nimo nga i-upload ang bot sa usa ka serbisyo sa Git, sama sa GitHub ug uban pa, ug i-clone kini sa usa ka server sa VPS, o i-download ang imong bot sa ubang mga paagi. Palihug timan-i nga aduna kay console, walay GUI. Sa tanan.

Human nimo ma-download ang imong bot, kinahanglan nimo nga padaganon kini. Alang niini, kinahanglan nimo:

  • Ibalik ang tanan nga dependency: dotnet restore
  • Pagtukod og aplikasyon: dotnet build name_project.sln -c Release
  • Lakaw ngadto sa gitukod nga DLL;
  • dotnet name_of_file.dll

Mga pahalipay! Nagdagan ang imong bot. Bisan pa, ang bot, sa walay palad, nag-okupar sa console, ug dili sayon ​​​​ang paggawas sa VPS server. Usab, sa kaso sa usa ka server restart, kamo kinahanglan nga magsugod sa bot sa usa ka bag-o nga paagi. Adunay duha ka mga paagi gikan sa sitwasyon. Ang tanan niini adunay kalabutan sa paglansad sa pagsugod sa server:

  • Idugang ang run script sa /etc/init.d
  • Paghimo usa ka serbisyo nga modagan sa pagsugod.

Wala nako makita ang punto sa pagpuyo sa kanila sa detalye, ang tanan gihulagway sa igo nga detalye sa Internet.

kaplag

Nalipay ko nga gidawat nako kini nga buluhaton. Kini ang akong una nga kasinatian sa pagpauswag sa bot, ug nalipay ako nga nakakuha ako bag-ong kahibalo sa C #, ug nagtrabaho kauban ang Linux.

Link sa Discord server. Para sa mga nagdula og Wargaming nga dula.
Pag-link sa repository diin nahimutang ang Discord bot.
Link sa DSharpPlus repository.
Бпасибо за вниманиС!

Source: www.habr.com

Idugang sa usa ka comment