Kuunda mfumo wa Discord bot kwenye .NET Core na kupelekwa kwa seva ya VPS

Kuunda mfumo wa Discord bot kwenye .NET Core na kupelekwa kwa seva ya VPS

Habari Khabrovites!

Leo utaona makala ambayo itakuonyesha jinsi ya kuunda bot kwa kutumia C # kwenye NET Core na jinsi ya kuiendesha kwenye seva ya mbali.

Nakala hiyo itajumuisha usuli, hatua ya maandalizi, mantiki ya kuandika na kuhamisha bot kwa seva ya mbali.

Natumaini makala hii itasaidia Kompyuta nyingi.

kabla ya historia

Yote ilianza usiku mmoja wa vuli usio na usingizi ambao nilitumia kwenye seva ya Discord. Kwa kuwa nilijiunga naye hivi majuzi, nilianza kumsoma juu chini. Baada ya kupata chaneli ya maandishi "Nafasi", nilipendezwa, nikaifungua, na nikapata kati ya matoleo ambayo hayakunivutia, haya ni:

"Programu (msanidi wa bot)
Mahitaji:

  • ujuzi wa lugha za programu;
  • uwezo wa kujisomea.

ПоТСлания:

  • uwezo wa kuelewa kanuni za watu wengine;
  • ujuzi wa utendaji wa DISCORD.

Malengo:

  • maendeleo ya bot;
  • msaada na matengenezo ya bot.

Faida yako:

  • Fursa ya kusaidia na kushawishi mradi unaopenda;
  • Kupata uzoefu wa kufanya kazi katika timu;
  • Fursa ya kuonyesha na kuboresha ujuzi uliopo.


Hii ilinivutia mara moja. Ndio, hawakulipa kazi hii, lakini hawakudai majukumu yoyote kutoka kwako, na haitakuwa ya juu sana kwenye kwingineko. Kwa hivyo, niliandika kwa msimamizi wa seva, na akaniuliza niandike bot ambayo itaonyesha takwimu za mchezaji katika Ulimwengu wa Mizinga.

awamu ya maandalizi

Kuunda mfumo wa Discord bot kwenye .NET Core na kupelekwa kwa seva ya VPS
Discrod
Kabla ya kuanza kuandika bot yetu, tunahitaji kuiundia Discord. Unahitaji:

  1. Ingia kwenye akaunti ya Discord ΠΏΠΎ ссылкС
  2. Katika kichupo cha "Maombi", bofya kitufe cha "Programu Mpya" na upe jina bot
  3. Pata tokeni ya kijibu kwa kuingia kwenye bot yako na kutafuta kichupo cha "Bot" kwenye orodha ya "Mipangilio".
  4. Hifadhi ishara mahali fulani

Mchezo wa vita

Pia, unahitaji kuunda programu katika Wargaming ili kupata ufikiaji wa API ya Wargaming. Hapa, pia, kila kitu ni rahisi:

  1. Ingia kwenye akaunti yako ya Wargaming kwa kiungo hiki
  2. Tunaenda kwa "Maombi Yangu" na bonyeza kitufe cha "Ongeza programu mpya", tukitoa jina la programu na kuchagua aina yake.
  3. Inahifadhi Kitambulisho cha Maombi

programu

Tayari kuna uhuru wa kuchagua. Mtu hutumia Visual Studio, mtu Rider, mtu kwa ujumla ana nguvu, na anaandika nambari katika Vim (baada ya yote, watengenezaji wa programu halisi hutumia kibodi tu, sivyo?). Walakini, ili usitekeleze API ya Discord, unaweza kutumia maktaba isiyo rasmi ya C # "DSharpPlus". Unaweza kuisanikisha kutoka kwa NuGet, au kwa kujenga vyanzo mwenyewe kutoka kwa hazina.

Kwa wale ambao hawajui au wamesahau jinsi ya kusakinisha programu kutoka NuGet.Maagizo ya Visual Studio

  1. Nenda kwenye kichupo Mradi - Dhibiti Vifurushi vya NuGet;
  2. Bofya kwenye ukaguzi na katika uwanja wa utafutaji ingiza "DSharpPlus";
  3. Chagua na usakinishe mfumo;
  4. Fanya!

Hatua ya maandalizi imekwisha, unaweza kuendelea na kuandika bot.

Mantiki ya kuandika

Kuunda mfumo wa Discord bot kwenye .NET Core na kupelekwa kwa seva ya VPS

Hatutazingatia mantiki nzima ya programu, nitaonyesha tu jinsi ya kufanya kazi na kutekwa kwa ujumbe na bot, na jinsi ya kufanya kazi na API ya Wargaming.

Kufanya kazi na Discord bot hutokea kupitia Task MainTask tuli (kamba[] args);
Kuita kazi hii, katika Kuu unahitaji kujiandikisha

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

Ifuatayo, unahitaji kuanzisha bot yako:

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

Ambapo ishara ni bot yako.
Kisha, kupitia lambda, tunaandika amri zinazohitajika ambazo bot inapaswa kutekeleza:

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

Ambapo e.Author.Jina la mtumiaji linapata jina la utani la mtumiaji.

Kwa njia hii, unapotuma ujumbe wowote unaoanza na &, roboti itakusalimia.

Mwishoni mwa chaguo hili la kukokotoa, lazima uandike wait discord.ConnectAsync(); na kusubiri Task.Delay(-1);

Hii itakuruhusu kutekeleza amri nyuma bila kuchukua uzi kuu.

Sasa tunahitaji kushughulika na API ya Wargaming. Kila kitu ni rahisi hapa - andika maombi ya CURL, pata jibu kwa njia ya kamba ya JSON, toa data muhimu kutoka hapo na ufanyie udanganyifu.

Mfano wa kufanya kazi na 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;
        }

Makini! Haipendekezi kabisa kuhifadhi ishara zote na vitambulisho vya maombi katika maandishi wazi! Kwa kiwango cha chini, Discord hupiga marufuku ishara hizo wakati zinaingia kwenye mtandao wa kimataifa, na kwa kiwango cha juu, bot huanza kutumiwa na washambuliaji.

Tumia kwa VPS - seva

Kuunda mfumo wa Discord bot kwenye .NET Core na kupelekwa kwa seva ya VPS

Mara tu unapomaliza kutumia roboti, inahitaji kupangishwa kwenye seva ambayo inafanya kazi kila mara 24/7. Hii ni kutokana na ukweli kwamba wakati programu yako inaendesha, bot pia inafanya kazi. Mara tu unapozima programu, kijibu chako hulala pia.

Seva nyingi za VPS zipo katika ulimwengu huu, kwenye Windows na kwenye Linux, hata hivyo, katika hali nyingi, ni nafuu zaidi kukaribisha kwenye Linux.

Kwenye seva ya Discord, nilishauriwa vscale.io, na mara moja niliunda seva pepe kwenye Ubuntu juu yake na kupakia bot. Sitaelezea jinsi tovuti hii inavyofanya kazi, lakini itaenda moja kwa moja kwenye mipangilio ya bot.

Awali ya yote, unahitaji kufunga programu muhimu ambayo itaendesha bot yetu iliyoandikwa katika NET Core. Jinsi ya kufanya hivyo imeelezwa hapa.

Ifuatayo, unahitaji kupakia kijibu kwa huduma ya Git, kama GitHub na kadhalika, na uifanye kwa seva ya VPS, au upakue bot yako kwa njia zingine. Tafadhali kumbuka kuwa utakuwa na koni tu, hakuna GUI. Hata kidogo.

Baada ya kupakua bot yako, unahitaji kuiendesha. Kwa hili, unahitaji:

  • Rejesha utegemezi wote: kurejesha dotnet
  • Jenga programu: dotnet build name_project.sln -c Toa
  • Nenda kwa DLL iliyojengwa;
  • dotnet name_of_file.dll

Hongera! Kijibu chako kinaendelea. Hata hivyo, bot, kwa bahati mbaya, inachukua console, na si rahisi kuondoka kwa seva ya VPS. Pia, ikiwa seva itaanzisha tena, itabidi uanzishe bot kwa njia mpya. Kuna njia kadhaa za kutoka kwa hali hiyo. Zote zinahusiana na uzinduzi wakati wa kuanza kwa seva:

  • Ongeza hati ya kukimbia kwa /etc/init.d
  • Unda huduma ambayo itaanza wakati wa kuanza.

Sioni uhakika wa kukaa juu yao kwa undani, kila kitu kinaelezwa kwa undani wa kutosha kwenye mtandao.

Matokeo

Nina furaha nilichukua jukumu hili. Huu ulikuwa uzoefu wangu wa kwanza wa ukuzaji wa roboti, na ninafurahi kwamba nilipata maarifa mapya katika C #, na kufanya kazi na Linux.

Unganisha kwa seva ya Discord. Kwa wale wanaocheza michezo ya Wargaming.
Unganisha kwenye hazina ambapo Discord bot iko.
Unganisha kwa hazina ya DSharpPlus.
Asante!

Chanzo: mapenzi.com

Kuongeza maoni