Kreye yon bot Discord sou .NET Nwayo ak deplwaman nan yon sèvè VPS

Kreye yon bot Discord sou .NET Nwayo ak deplwaman nan yon sèvè VPS

Bonjou, rezidan Khabrovsk!

Jodi a ou pral li yon atik ki pral di ou ki jan yo kreye yon bot lè l sèvi avèk C# sou .NET Nwayo, ak ki jan yo kouri li sou yon sèvè aleka.

Atik la pral konpoze de background, etap preparasyon, ekri lojik ak transfere bot la nan yon sèvè aleka.

Mwen espere atik sa a pral ede anpil débutan.

pre-istwa

Tout bagay te kòmanse yon nwit otòn san dòmi, ke mwen te pase sou sèvè Discord la. Depi mwen te rantre nan li relativman dènyèman, mwen te kòmanse etidye li anndan kou deyò. Lè m te dekouvri chanèl tèks "Pos vid yo", mwen te enterese, mwen te louvri li, epi mwen te jwenn pami òf yo ki pa enterese m ', sa a:

"Programmer (pwomotè bot)
Kondisyon:

  • konesans nan langaj pwogramasyon;
  • kapasite pou aprann pwòp tèt ou.

Пожелания:

  • kapasite pou konprann kòd lòt moun;
  • konesans nan fonksyonalite DISCORD.

Objektif:

  • devlopman bot;
  • sipò ak antretyen nan bot la.

Benefis ou:

  • Opòtinite pou sipòte ak enfliyanse pwojè ou renmen an;
  • Jwenn eksperyans travay nan yon ekip;
  • Opòtinite pou demontre ak amelyore konpetans ki egziste deja.”


Sa a imedyatman pike enterè mwen. Wi, yo pa t 'peye pou travay sa a, men yo pa t' mande okenn obligasyon nan men ou, epi li pa pral initil nan dosye ou. Se konsa, mwen te ekri admin sèvè a, epi li te mande m 'ekri yon bot ki ta montre estatistik jwè nan World of Tanks.

Faz la preparasyon pou

Kreye yon bot Discord sou .NET Nwayo ak deplwaman nan yon sèvè VPS
Disk
Anvan nou kòmanse ekri bot nou an, nou bezwen kreye li pou Discord. Ou bezwen:

  1. Konekte sou kont Discord по ссылке
  2. Nan tab la "Aplikasyon", klike sou bouton "Nouvo Aplikasyon" epi bay non bot la
  3. Jwenn yon siy bot lè w konekte nan bot ou a epi jwenn tab la "Bot" nan lis "Anviwònman".
  4. Sove siy la yon kote

Wargaming

Epitou, ou bezwen kreye yon aplikasyon nan Wargaming pou jwenn aksè nan API Wargaming la. Tout bagay se senp isit la tou:

  1. Konekte sou kont Wargaming ou pa lyen sa a
  2. Ale nan "Aplikasyon mwen yo" epi klike sou bouton "Ajoute yon nouvo aplikasyon", bay non aplikasyon an epi chwazi kalite li yo.
  3. Sove ID aplikasyon an

lojisyèl

Gen libète chwa deja. Gen kèk ki sèvi ak Visual Studio, kèk Rider, gen kèk ki jeneralman pwisan, epi ekri kòd nan Vim (apre tout, pwogramasyon reyèl sèlman itilize klavye a, pa vre?). Sepandan, pou evite aplike API Discord, ou ka itilize bibliyotèk C# ki pa ofisyèl "DSharpPlus". Ou ka enstale li swa nan NuGet, oswa pa kolekte sous yo tèt ou nan repozitwa a.

Pou moun ki pa konnen oswa ki bliye ki jan yo enstale aplikasyon ki soti nan NuGet.Enstriksyon pou Visual Studio

  1. Ale nan tab la Pwojè - Jere pakè NuGet;
  2. Klike sou revizyon epi antre "DSharpPlus" nan jaden rechèch la;
  3. Chwazi epi enstale kad la;
  4. PROFIT!

Etap preparasyon an fini, ou ka ale nan ekri yon bot.

Ekri lojik

Kreye yon bot Discord sou .NET Nwayo ak deplwaman nan yon sèvè VPS

Nou p ap gade tout lojik aplikasyon an; Mwen pral jis montre w kijan pou w travay avèk bot entèsepsyon mesaj yo ak kijan pou w travay ak API Wargaming la.

Travay ak bot Discord la fèt atravè Task MainTask async estatik (string[] args);
Pou rele fonksyon sa a, nan Main ou bezwen ekri

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

Apre sa, ou bezwen inisyalize bot ou a:

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

Ki kote siy se siy bot ou a.
Lè sa a, lè l sèvi avèk yon lambda, nou ekri kòmandman ki nesesè yo ke bot la ta dwe egzekite:

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

Ki kote e.Author.Username – jwenn tinon itilizatè a.

Nan fason sa a, lè ou voye nenpòt mesaj ki kòmanse ak &, bot la ap salye ou.

Nan fen fonksyon sa a, ou bezwen ekri await discord.ConnectAsync(); epi tann Task.Delay(-1);

Sa a pral pèmèt kòmandman yo dwe egzekite nan background nan san yo pa okipe fil prensipal la.

Koulye a, ou bezwen konprann API Wargaming la. Tout bagay se senp isit la - ekri demann CURL, resevwa yon repons nan fòm lan nan yon fisèl JSON, ekstrè done ki nesesè yo soti nan la ak manipile li.

Yon egzanp travay ak 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;
        }

Atansyon! Li pa rekòmande pou sere tout marqueur ak idantite aplikasyon yo nan tèks klè! Nan yon minimòm, Discord entèdi siy sa yo lè yo jwenn sou World Wide Web la; nan yon maksimòm, bot la kòmanse itilize pa atakè yo.

Deplwaye sou sèvè VPS

Kreye yon bot Discord sou .NET Nwayo ak deplwaman nan yon sèvè VPS

Yon fwa ou fini ak bot la, li bezwen yo dwe anime sou yon sèvè ki toujou ap kouri 24/7. Sa a se akòz lefèt ke lè aplikasyon w lan ap kouri, bot la ap kouri tou. Le pli vit ke ou fèmen aplikasyon an, bot ou a ale nan dòmi.

Gen anpil sèvè VPS nan mond sa a, tou de sou Windows ak Linux, men nan pifò ka yo, li pi bon mache pou òganize sou Linux.

Sou sèvè Discord yo rekòmande vscale.io pou mwen, epi mwen imedyatman kreye yon sèvè vityèl sou Ubuntu sou li epi telechaje bot la. Mwen pa pral dekri kijan sit sa a ap travay, men mwen pral imedyatman deplase sou mete kanpe bot la.

Premye a tout, ou bezwen enstale lojisyèl ki nesesè ki pral kouri bot nou an, ki ekri nan .NET Nwayo. Ki jan fè sa a dekri isit la.

Apre sa, ou bezwen telechaje bot la nan Git - yon sèvis tankou GitHub ak tankou - epi klonaj li nan yon sèvè VPS, oswa, nan lòt fason, telechaje bot ou a. Tanpri sonje ke ou pral sèlman gen yon konsole, pa gen okenn entèfas. Nan tout.

Apre ou fin telechaje bot ou a, ou bezwen lanse li. Pou fè sa, ou bezwen:

  • Restore tout depandans: dotnet restore
  • Bati aplikasyon an: dotnet build name_project.sln -c Release
  • Ale nan DLL bati a;
  • dotnet name_of_file.dll

Felisitasyon! Bot ou ap kouri. Sepandan, bot la, malerezman, okipe konsole a, epi kite sèvè VPS la pa tèlman fasil. Epitou, si sèvè a rekòmanse, w ap oblije rekòmanse bot la ankò. Gen yon koup nan fason soti nan sitiyasyon an. Tout nan yo gen rapò ak lansman nan demaraj sèvè:

  • Ajoute lansman script nan /etc/init.d
  • Kreye yon sèvis ki pral kòmanse nan demaraj.

Mwen pa wè okenn pwen nan rete sou yo an detay; tout bagay yo dekri an detay ase sou entènèt la.

Jwenn

Mwen byen kontan mwen te pran travay sa a. Sa a te premye eksperyans mwen devlope yon bot, e mwen byen kontan ke mwen te pran nouvo konesans nan C # ak travay ak Linux.

Link nan sèvè Discord. Pou moun ki jwe jwèt Wargaming.
Link nan depo a kote bot Discord ye.
Link nan depo DSharpPlus.
Mèsi pou atansyon ou!

Sous: www.habr.com

Add nouvo kòmantè