Kreante Discord-bot sur .NET Core kun deplojo al VPS-servilo

Kreante Discord-bot sur .NET Core kun deplojo al VPS-servilo

Saluton Khabrovites!

Hodiaŭ vi vidos artikolon, kiu montros al vi kiel krei bot uzante C# sur .NET Core kaj kiel ruli ĝin sur fora servilo.

La artikolo konsistos el fono, prepara etapo, skribado de logiko kaj translokigo de la bot al fora servilo.

Mi esperas, ke ĉi tiu artikolo helpos multajn komencantojn.

antaŭhistorio

Ĉio komenciĝis en unu sendorma aŭtuna nokto, kiun mi pasigis en la Discord-servilo. Ĉar mi ĵus aliĝis al li, mi komencis studi lin supren kaj malsupren. Trovinte la tekstkanalon "Vakantaĵoj", mi interesiĝis, malfermis ĝin, kaj trovis inter la ofertoj, kiuj ne interesis min, jen:

"Programisto (botprogramisto)
Postuloj:

  • kono de programlingvoj;
  • kapablo por memlernado.

Deziroj:

  • kapablo kompreni aliulan kodon;
  • scio pri DISCORD-funkcio.

Objektivoj:

  • robot-disvolviĝo;
  • subteno kaj bontenado de la bot.

Via profito:

  • Ŝanco subteni kaj influi la projekton, kiun vi ŝatas;
  • Akiri sperton labori en teamo;
  • Ŝanco montri kaj plibonigi ekzistantajn kapablojn.


Ĉi tio tuj interesis min. Jes, ili ne pagis por ĉi tiu laboro, sed ili postulis neniujn obligaciojn de vi, kaj ĝi ne estos superflua en la biletujo. Tial mi skribis al la administranto de la servilo, kaj li petis min skribi bot, kiu montros la statistikojn de la ludanto en World of Tanks.

Prepara etapo

Kreante Discord-bot sur .NET Core kun deplojo al VPS-servilo
Discrod
Antaŭ ol ni komencas skribi nian roboton, ni devas krei ĝin por Discord. Vi bezonas:

  1. Ensalutu al Discord-konto ligilo
  2. En la langeto "Aplikoj", alklaku la butonon "Nova Apliko" kaj nomu la roboton
  3. Akiru bot-ĵetonon ensalutu en vian bot kaj trovante la langeton "Bot" en la listo "Agordoj".
  4. Konservu la ĵetonon ie

Wargaming

Ankaŭ, vi devas krei aplikaĵon en Wargaming por akiri aliron al la Wargaming API. Ĉi tie ankaŭ ĉio estas simpla:

  1. Ensalutu al via Wargaming-konto per ĉi tiu ligilo
  2. Ni iras al "Miaj Aplikoj" kaj alklaku la butonon "Aldoni novan aplikaĵon", donante la nomon de la aplikaĵo kaj elektante ĝian tipon.
  3. Konservante la Aplikan ID

Programaro

Jam estas libereco de elekto. Iu uzas Visual Studio, iu Rider, iu estas ĝenerale potenca, kaj skribas kodon en Vim (finfine, veraj programistoj uzas nur la klavaron, ĉu ne?). Tamen, por ne efektivigi la Discord API, vi povas uzi la neoficialan C#-bibliotekon "DSharpPlus". Vi povas instali ĝin aŭ de NuGet, aŭ konstruante la fontojn mem el la deponejo.

Por tiuj, kiuj ne scias aŭ forgesis kiel instali aplikaĵojn de NuGet.Instrukcioj por Visual Studio

  1. Iru al la langeto Projekto - Administri NuGet-Pakojn;
  2. Alklaku la revizion kaj en la serĉkampo enigu "DSharpPlus";
  3. Elektu kaj instalu kadron;
  4. PROFITO!

La prepara etapo finiĝis, vi povas daŭrigi skribi la bot.

Skriba logiko

Kreante Discord-bot sur .NET Core kun deplojo al VPS-servilo

Ni ne konsideros la tutan logikon de la aplikaĵo, mi nur montros kiel labori kun la interkapto de mesaĝoj de la bot, kaj kiel labori kun la Wargaming API.

Labori kun la Discord-bot okazas per la senmova nesinkrona Task MainTask (string[] args);
Por voki ĉi tiun funkcion, en Ĉefa vi devas registriĝi

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

Poste, vi devas pravalorigi vian bot:

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

Kie ĵetono estas la ĵetono de via bot.
Tiam, per la lambda, ni skribas la necesajn komandojn, kiujn la bot devas ekzekuti:

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

Kie e.Author.Username ricevas la kromnomon de la uzanto.

Tiel, kiam vi sendas ajnan mesaĝon kiu komenciĝas per &, la roboto salutos vin.

Fine de ĉi tiu funkcio, vi devas skribi await discord.ConnectAsync(); kaj atendu Taskon.Prokrasto(-1);

Ĉi tio permesos al vi ekzekuti komandojn en la fono sen preni la ĉefan fadenon.

Nun ni devas trakti la Wargaming API. Ĉio ĉi tie estas simpla - skribu KURL-petojn, ricevu respondon en formo de JSON-ĉeno, eltiru la necesajn datumojn de tie kaj faru manipuladojn sur ili.

Ekzemplo de laboro kun 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;
        }

Atentu! Estas strikte ne rekomendite stoki ĉiujn ĵetonojn kaj aplikajn identigilojn en klara teksto! Minimume, Discord malpermesas tiajn ĵetonojn kiam ili eniras la tutmondan reton, kaj maksimume, la bot komencas esti uzata de atakantoj.

Deploji al VPS - servilo

Kreante Discord-bot sur .NET Core kun deplojo al VPS-servilo

Post kiam vi finis kun la bot, ĝi devas esti gastigita sur servilo, kiu konstante funkcias 24/7. Ĉi tio estas pro la fakto, ke kiam via aplikaĵo funkcias, la bot ankaŭ funkcias. Tuj kiam vi malŝaltas la aplikaĵon, ankaŭ via roboto endormiĝas.

Multaj VPS-serviloj ekzistas en ĉi tiu mondo, kaj en Vindozo kaj en Linukso, tamen, en la plej multaj kazoj, estas multe pli malmultekosta gastigi en Linukso.

Sur la Discord-servilo, mi estis konsilita vscale.io, kaj mi tuj kreis virtualan servilon en Ubuntu sur ĝi kaj alŝutis la bot. Mi ne priskribos kiel ĉi tiu retejo funkcias, sed iros rekte al la bot-agordoj.

Antaŭ ĉio, vi devas instali la necesan programaron, kiu funkcios nian roboton skribitan en .NET Core. Kiel fari ĝin estas priskribita ĉi tie.

Poste, vi devas alŝuti la roboton al Git-servo, kiel GitHub kaj similaj, kaj kloni ĝin al VPS-servilo aŭ elŝuti vian roboton alimaniere. Bonvolu noti, ke vi havos nur konzolon, neniun GUI. Entute.

Post kiam vi elŝutis vian bot, vi devas ruli ĝin. Por ĉi tio, vi bezonas:

  • Restarigu ĉiujn dependecojn: dotnet-restarigi
  • Konstrua aplikaĵo: dotnet build name_project.sln -c Liberigo
  • Iru al konstruita DLL;
  • dotnet name_of_file.dll

Gratulon! Via bot funkcias. Tamen, la bot, bedaŭrinde, okupas la konzolon, kaj ne estas facile eliri la VPS-servilon. Ankaŭ, en kazo de rekomenco de servilo, vi devos komenci la roboton en nova maniero. Estas kelkaj elvojoj el la situacio. Ĉiuj ili rilatas al la lanĉo ĉe servila ekfunkciigo:

  • Aldonu rulan skripton al /etc/init.d
  • Kreu servon, kiu funkcios ĉe ekfunkciigo.

Mi ne vidas la signifon detale detale deteni ilin, ĉio estas sufiĉe detale priskribita en la Interreto.

trovoj

Mi ĝojas, ke mi prenis ĉi tiun taskon. Ĉi tio estis mia unua sperto pri robot-disvolvado, kaj mi ĝojas, ke mi akiris novajn sciojn pri C#, kaj labori kun Linukso.

Ligo al Discord-servilo. Por tiuj, kiuj ludas Wargaming-ludojn.
Ligu al la deponejo, kie troviĝas la Discord-bot.
Ligo al la deponejo DSharpPlus.
Спасибо за внимание!

fonto: www.habr.com

Aldoni komenton