Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS

Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS

Hello Khabrovites!

Illum se tara artiklu li jurik kif toħloq bot billi tuża C# fuq .NET Core u kif tħaddem fuq server remot.

L-artiklu se jikkonsisti fi sfond, stadju preparatorju, kitba ta 'loġika u trasferiment tal-bot għal server remot.

Nittama li dan l-artikolu se jgħin ħafna jibdew.

preistorja

Kollox beda f'lejl wieħed tal-ħarifa bla rqad li qattajt fuq is-server Discord. Peress li dan l-aħħar ingħaqadt miegħu, bdejt nistudjah 'il fuq u' l isfel. Wara li sibt il-kanal tat-test "Postijiet vakanti", sirt interessat, ftaħtu, u sibt fost l-offerti li ma kinux jinteressawni, dawn huma:

"Programmatur (iżviluppatur bot)
Rekwiżiti:

  • għarfien ta' lingwi ta' programmar;
  • kapaċità għal awto-tagħlim.

Пожелания:

  • abbiltà li tifhem il-kodiċi ta 'nies oħrajn;
  • għarfien tal-funzjonalità DISCORD.

Kompiti:

  • żvilupp tal-bot;
  • appoġġ u manutenzjoni tal-bot.

Il-benefiċċju tiegħek:

  • Opportunità li tappoġġja u tinfluwenza l-proġett li tixtieq;
  • Il-kisba ta' esperjenza ta' xogħol f'tim;
  • Opportunità biex turi u ttejjeb il-ħiliet eżistenti.


Dan immedjatament interessatni. Iva, ma ħallsux għal dan ix-xogħol, iżda ma talbu l-ebda obbligu mingħandek, u mhux se jkun superfluwu fil-portafoll. Għalhekk, ktibt lill-admin tas-server, u talabni nikteb bot li juri l-istatistika tal-plejer f'World of Tanks.

Il-fażi preparatorja

Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS
Discrod
Qabel ma nibdew niktbu l-bot tagħna, irridu noħolquha għal Discord. Għandek bżonn:

  1. Idħol fil-kont Discord по ссылке
  2. Fit-tab "Applikazzjonijiet", ikklikkja fuq il-buttuna "Applikazzjoni Ġdida" u semmi l-bot
  3. Ikseb token tal-bot billi tidħol fil-bot tiegħek u ssib it-tab "Bot" fil-lista "Settings"
  4. Salv it-token x'imkien

wargaming

Ukoll, trid toħloq applikazzjoni f'Wargaming biex tikseb aċċess għall-API Wargaming. Hawnhekk ukoll, kollox huwa sempliċi:

  1. Idħol fil-kont tiegħek ta' Wargaming minn din il-link
  2. Immorru fuq "L-Applikazzjonijiet Tiegħi" u nikklikkjaw fuq il-buttuna "Żid applikazzjoni ġdida", billi nagħtu l-isem tal-applikazzjoni u nagħżlu t-tip tagħha
  3. Iffrankar tal-ID tal-Applikazzjoni

softwer

Diġà hemm il-libertà tal-għażla. Xi ħadd juża Visual Studio, xi ħadd Rider, xi ħadd huwa ġeneralment qawwi, u jikteb kodiċi f'Vim (wara kollox, programmaturi reali jużaw biss it-tastiera, hux?). Madankollu, sabiex ma timplimentax l-API Discord, tista 'tuża l-librerija C# mhux uffiċjali "DSharpPlus". Tista 'tinstallah jew minn NuGet, jew billi tibni s-sorsi lilek innifsek mir-repożitorju.

Għal dawk li ma jafux jew insew kif jinstallaw applikazzjonijiet minn NuGet.Struzzjonijiet għal Visual Studio

  1. Mur fit-tab Proġett - Immaniġġja Pakketti NuGet;
  2. Ikklikkja fuq ir-reviżjoni u fil-qasam tat-tfittxija daħħal "DSharpPlus";
  3. Agħżel u installa qafas;
  4. QLIGĦ!

L-istadju preparatorju spiċċa, tista 'tipproċedi biex tikteb il-bot.

Il-loġika tal-kitba

Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS

Mhux se nikkunsidraw il-loġika kollha tal-applikazzjoni, ser nuri biss kif taħdem bl-interċettazzjoni ta 'messaġġi mill-bot, u kif taħdem mal-API Wargaming.

Il-ħidma mal-bot Discord iseħħ permezz tal-Task MainTask async statiku (string[] args);
Biex issejjaħ din il-funzjoni, fil-Main trid tirreġistra

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

Sussegwentement, għandek bżonn tibda l-bot tiegħek:

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

Fejn it-token huwa t-token tal-bot tiegħek.
Imbagħad, permezz tal-lambda, niktbu l-kmandi meħtieġa li l-bot għandu jesegwixxi:

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

Fejn e.Author.Username qed jikseb il-laqam tal-utent.

B'dan il-mod, meta tibgħat xi messaġġ li jibda b'&, il-bot sellejk.

Fl-aħħar ta 'din il-funzjoni, trid tikteb await discord.ConnectAsync(); u stenna Task.Delay(-1);

Dan jippermettilek tesegwixxi kmandi fl-isfond mingħajr ma tieħu l-ħajt prinċipali.

Issa rridu nittrattaw l-API Wargaming. Hawnhekk kollox huwa sempliċi - ikteb it-talbiet CURL, ikseb tweġiba fil-forma ta 'sekwenza JSON, iġbed id-dejta meħtieġa minn hemm u wettaq manipulazzjonijiet fuqhom.

Eżempju ta' kif taħdem ma' 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;
        }

Attenzjoni! Huwa strettament mhux rakkomandat li taħżen it-tokens u l-IDs tal-applikazzjoni kollha f'test ċar! Bħala minimu, Discord jipprojbixxi tali tokens meta jidħlu fin-netwerk dinji, u massimu, il-bot jibda jintuża minn attakkanti.

Użu għal VPS - server

Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS

Ladarba tkun lest il-bot, jeħtieġ li jkun ospitat fuq server li jkun għaddej kontinwament 24/7. Dan huwa dovut għall-fatt li meta l-applikazzjoni tiegħek tkun qed taħdem, il-bot qed jaħdem ukoll. Hekk kif itfi l-applikazzjoni, il-bot tiegħek torqod ukoll.

Ħafna servers VPS jeżistu f'din id-dinja, kemm fuq il-Windows kif ukoll fuq il-Linux, madankollu, f'ħafna każijiet, huwa ħafna orħos li jospita fuq Linux.

Fuq is-server Discord, ġejt avżat vscale.io, u immedjatament ħloqt server virtwali fuq Ubuntu fuqu u tellagħt il-bot. Mhux se niddeskrivi kif jaħdem dan is-sit, iżda se mmur direttament għas-settings tal-bot.

L-ewwelnett, għandek bżonn tinstalla s-softwer meħtieġ li jħaddem il-bot tagħna miktub f'.NET Core. Kif tagħmel dan huwa deskritt hawn.

Sussegwentement, għandek bżonn ittella' l-bot f'servizz Git, bħal GitHub u simili, u tikklonah fuq server VPS, jew tniżżel il-bot tiegħek b'modi oħra. Jekk jogħġbok innota li ser ikollok biss console, l-ebda GUI. Fuq kollox.

Wara li tkun niżżilt il-bot tiegħek, għandek bżonn tħaddem. Għal dan, għandek bżonn:

  • Irrestawra d-dipendenzi kollha: dotnet restawr
  • Ibni applikazzjoni: dotnet build name_project.sln -c Rilaxx
  • Mur DLL mibnija;
  • dotnet name_of_file.dll

Prosit! Il-bot tiegħek qed jaħdem. Madankollu, il-bot, sfortunatament, jokkupa l-console, u mhux faċli li toħroġ mis-server VPS. Ukoll, f'każ ta 'startjar mill-ġdid tas-server, ser ikollok tibda l-bot b'mod ġdid. Hemm ftit modi kif toħroġ mis-sitwazzjoni. Kollha kemm huma relatati mat-tnedija fl-istartjar tas-server:

  • Żid run script għal /etc/init.d
  • Oħloq servizz li jibda jaħdem mal-istartjar.

Ma narax il-punt li nitkellem fuqhom fid-dettall, kollox huwa deskritt f'dettall suffiċjenti fuq l-Internet.

Sejbiet

Jien kuntent li ħadt dan l-inkarigu. Din kienet l-ewwel esperjenza tiegħi fl-iżvilupp tal-bot, u ninsab kuntent li sibt għarfien ġdid f'C #, u naħdem mal-Linux.

Link għal server Discord. Għal dawk li jilagħbu logħob Wargaming.
Link għar-repożitorju fejn jinsab il-bot Discord.
Link għar-repożitorju DSharpPlus.
Grazzi tal-attenzjoni tiegħek!

Sors: www.habr.com

Żid kumment