Paggawa ng Discord bot sa .NET Core na may deployment sa isang VPS server

Paggawa ng Discord bot sa .NET Core na may deployment sa isang VPS server

Hello mga Khabrovites!

Ngayon ay makikita mo ang isang artikulo na magpapakita sa iyo kung paano lumikha ng isang bot gamit ang C# sa .NET Core at kung paano ito patakbuhin sa isang malayong server.

Ang artikulo ay binubuo ng isang background, isang yugto ng paghahanda, pagsusulat ng lohika at paglilipat ng bot sa isang malayong server.

Umaasa ako na ang artikulong ito ay makakatulong sa maraming mga nagsisimula.

prehistory

Nagsimula ang lahat sa isang walang tulog na gabi ng taglagas na ginugol ko sa server ng Discord. Dahil kamakailan lang ay sumama ako sa kanya, sinimulan ko siyang pag-aralan pataas at pababa. Nang matagpuan ko ang text channel na "Vacancies", naging interesado ako, binuksan ito, at natagpuan sa mga alok na hindi ako interesado, ito ay:

"Programmer (developer ng bot)
Mga Kinakailangan:

  • kaalaman sa mga programming language;
  • kakayahan para sa sariling pag-aaral.

ПоТСлания:

  • kakayahang maunawaan ang code ng ibang tao;
  • kaalaman sa pag-andar ng DISCORD.

Mga Layunin:

  • pag-unlad ng bot;
  • suporta at pagpapanatili ng bot.

Ang iyong benepisyo:

  • Pagkakataon na suportahan at impluwensyahan ang proyektong gusto mo;
  • Pagkakaroon ng karanasan sa pagtatrabaho sa isang pangkat;
  • Pagkakataon upang ipakita at pagbutihin ang mga umiiral na kasanayan.


Ito ay agad na interesado sa akin. Oo, hindi nila binayaran ang gawaing ito, ngunit hindi sila humingi ng anumang mga obligasyon mula sa iyo, at hindi ito magiging labis sa portfolio. Samakatuwid, sumulat ako sa admin ng server, at hiniling niya sa akin na magsulat ng isang bot na magpapakita ng mga istatistika ng manlalaro sa World of Tanks.

Ang paghahanda phase

Paggawa ng Discord bot sa .NET Core na may deployment sa isang VPS server
Discrod
Bago natin simulan ang pagsusulat ng ating bot, kailangan nating gawin ito para sa Discord. Kailangan mo:

  1. Mag-login sa Discord account ΠΏΠΎ ссылкС
  2. Sa tab na "Mga Application", mag-click sa button na "Bagong Application" at pangalanan ang bot
  3. Kumuha ng bot token sa pamamagitan ng pag-log in sa iyong bot at paghahanap sa tab na "Bot" sa listahan ng "Mga Setting."
  4. I-save ang token sa isang lugar

wargaming

Gayundin, kailangan mong lumikha ng isang application sa Wargaming upang makakuha ng access sa Wargaming API. Dito, masyadong, ang lahat ay simple:

  1. Mag-login sa iyong Wargaming account sa link na ito
  2. Pumunta kami sa "Aking Mga Aplikasyon" at mag-click sa pindutang "Magdagdag ng bagong application", binibigyan ang pangalan ng application at piliin ang uri nito
  3. Sine-save ang Application ID

software

Mayroon nang kalayaan sa pagpili. Ang isang tao ay gumagamit ng Visual Studio, isang tao na Rider, isang tao sa pangkalahatan ay makapangyarihan, at nagsusulat ng code sa Vim (pagkatapos ng lahat, ang mga tunay na programmer ay gumagamit lamang ng keyboard, tama ba?). Gayunpaman, upang hindi maipatupad ang Discord API, maaari mong gamitin ang hindi opisyal na C# library na β€œDSharpPlus”. Maaari mo itong i-install alinman mula sa NuGet, o sa pamamagitan ng pagbuo ng mga mapagkukunan sa iyong sarili mula sa imbakan.

Para sa mga hindi alam o nakalimutan kung paano mag-install ng mga application mula sa NuGet.Mga tagubilin para sa Visual Studio

  1. Pumunta sa tab na Project - Manage NuGet Packages;
  2. Mag-click sa pagsusuri at sa patlang ng paghahanap ipasok ang "DSharpPlus";
  3. Piliin at i-install ang framework;
  4. KITA!

Tapos na ang yugto ng paghahanda, maaari kang magpatuloy sa pagsulat ng bot.

Pagsusulat ng lohika

Paggawa ng Discord bot sa .NET Core na may deployment sa isang VPS server

Hindi namin isasaalang-alang ang buong lohika ng application, ipapakita ko lamang kung paano magtrabaho kasama ang pagharang ng mga mensahe ng bot, at kung paano magtrabaho kasama ang Wargaming API.

Ang pagtatrabaho sa Discord bot ay nangyayari sa pamamagitan ng static na async na Task MainTask(string[] args);
Upang tawagan ang function na ito, sa Main kailangan mong magparehistro

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

Susunod, kailangan mong simulan ang iyong bot:

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

Kung saan ang token ay ang token ng iyong bot.
Pagkatapos, sa pamamagitan ng lambda, isinusulat namin ang mga kinakailangang utos na dapat isagawa ng bot:

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

Kung saan kinukuha ng e.Author.Username ang palayaw ng user.

Sa ganitong paraan, kapag nagpadala ka ng anumang mensahe na nagsisimula sa &, sasalubungin ka ng bot.

Sa dulo ng function na ito, kailangan mong isulat ang await discord.ConnectAsync(); at hintayin ang Gawain. Delay(-1);

Papayagan ka nitong magsagawa ng mga utos sa background nang hindi kinukuha ang pangunahing thread.

Ngayon kailangan nating harapin ang Wargaming API. Ang lahat ay simple dito - magsulat ng mga kahilingan sa CURL, kumuha ng tugon sa anyo ng isang string ng JSON, bunutin ang kinakailangang data mula doon at magsagawa ng mga manipulasyon sa kanila.

Isang halimbawa ng pagtatrabaho sa 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;
        }

Pansin! Mahigpit na hindi inirerekomenda na iimbak ang lahat ng mga token at application ID sa malinaw na teksto! Sa pinakamababa, ipinagbabawal ng Discord ang mga naturang token kapag pumasok sila sa pandaigdigang network, at sa maximum, ang bot ay nagsisimulang gamitin ng mga umaatake.

I-deploy sa VPS - server

Paggawa ng Discord bot sa .NET Core na may deployment sa isang VPS server

Kapag tapos ka na sa bot, kailangan itong i-host sa isang server na patuloy na tumatakbo 24/7. Ito ay dahil sa ang katunayan na kapag ang iyong aplikasyon ay tumatakbo, ang bot ay tumatakbo din. Sa sandaling i-off mo ang application, matutulog din ang iyong bot.

Maraming mga server ng VPS ang umiiral sa mundong ito, parehong sa Windows at sa Linux, gayunpaman, sa karamihan ng mga kaso, mas mura ang mag-host sa Linux.

Sa server ng Discord, pinayuhan ako ng vscale.io, at agad akong lumikha ng isang virtual server sa Ubuntu dito at na-upload ang bot. Hindi ko ilalarawan kung paano gumagana ang site na ito, ngunit dumiretso ako sa mga setting ng bot.

Una sa lahat, kailangan mong i-install ang kinakailangang software na magpapatakbo sa aming bot na nakasulat sa .NET Core. Kung paano ito gagawin ay inilarawan dito.

Susunod, kailangan mong i-upload ang bot sa isang serbisyo ng Git, tulad ng GitHub at katulad nito, at i-clone ito sa isang VPS server, o i-download ang iyong bot sa ibang mga paraan. Pakitandaan na magkakaroon ka lang ng console, walang GUI. Sa lahat.

Pagkatapos mong ma-download ang iyong bot, kailangan mo itong patakbuhin. Para dito, kailangan mo:

  • Ibalik ang lahat ng dependencies: dotnet restore
  • Bumuo ng application: dotnet build name_project.sln -c Release
  • Pumunta sa built DLL;
  • dotnet name_of_file.dll

Binabati kita! Tumatakbo ang iyong bot. Gayunpaman, ang bot, sa kasamaang-palad, ay sumasakop sa console, at hindi madaling lumabas sa VPS server. Gayundin, kung sakaling mag-restart ang server, kakailanganin mong simulan ang bot sa bagong paraan. Mayroong ilang mga paraan sa labas ng sitwasyon. Ang lahat ng mga ito ay nauugnay sa paglulunsad sa pagsisimula ng server:

  • Magdagdag ng run script sa /etc/init.d
  • Lumikha ng isang serbisyo na tatakbo sa pagsisimula.

Hindi ko nakikita ang punto sa pag-iingat sa mga ito nang detalyado, ang lahat ay inilarawan sa sapat na detalye sa Internet.

Natuklasan

Natutuwa akong tinanggap ko ang gawaing ito. Ito ang aking unang karanasan sa pagbuo ng bot, at natutuwa akong nakakuha ako ng bagong kaalaman sa C #, at nagtatrabaho sa Linux.

Link sa Discord server. Para sa mga naglalaro ng Wargaming games.
Mag-link sa repository kung saan matatagpuan ang Discord bot.
Link sa DSharpPlus repository.
Salamat sa iyo!

Pinagmulan: www.habr.com

Magdagdag ng komento