.NET Core-da VPS serveriga o'rnatish bilan Discord botini yaratish

.NET Core-da VPS serveriga o'rnatish bilan Discord botini yaratish

Salom Xabrovitlar!

Bugun siz .NET Core da C# yordamida qanday qilib bot yaratish va uni masofaviy serverda qanday ishga tushirishni ko'rsatadigan maqolani ko'rasiz.

Maqola fon, tayyorgarlik bosqichi, mantiqni yozish va botni uzoq serverga o'tkazishdan iborat bo'ladi.

Umid qilamanki, ushbu maqola ko'plab yangi boshlanuvchilarga yordam beradi.

Sana oldin

Hammasi men Discord serverida o'tkazgan uyqusiz kuz kechasida boshlandi. Men unga yaqinda qo'shilganimdan beri uni yuqoriga va pastga o'rgana boshladim. "Vakansiyalar" matnli kanalini topib, men qiziqib qoldim, uni ochdim va meni qiziqtirmagan takliflar orasidan topdim, bular:

"Dasturchi (bot ishlab chiqaruvchi)
Talablar:

  • dasturlash tillarini bilish;
  • o'z-o'zini o'rganish qobiliyati.

Tilaklar:

  • boshqa odamlarning kodini tushunish qobiliyati;
  • DISCORD funksiyasini bilish.

vazifalari:

  • bot ishlab chiqish;
  • botni qo'llab-quvvatlash va texnik xizmat ko'rsatish.

Sizning foydangiz:

  • O'zingizga yoqqan loyihani qo'llab-quvvatlash va ta'sir qilish imkoniyati;
  • Jamoada ishlash tajribasini orttirish;
  • Mavjud ko'nikmalarni namoyish qilish va yaxshilash imkoniyati.


Bu meni darhol qiziqtirdi. Ha, ular bu ish uchun pul to'lamadilar, lekin ular sizdan hech qanday majburiyat talab qilmadilar va bu portfelda ortiqcha bo'lmaydi. Shuning uchun, men server administratoriga yozdim va u mendan World of Tanksda o'yinchi statistikasini ko'rsatadigan bot yozishimni so'radi.

Tayyorgarlik bosqichi

.NET Core-da VPS serveriga o'rnatish bilan Discord botini yaratish
Diskrod
Botimizni yozishni boshlashdan oldin uni Discord uchun yaratishimiz kerak. Senga kerak:

  1. Discord hisobiga kiring aloqa
  2. "Ilovalar" yorlig'ida "Yangi dastur" tugmasini bosing va botga nom bering
  3. Botga kirish va "Sozlamalar" ro'yxatidagi "Bot" yorlig'ini topish orqali bot tokenini oling.
  4. Tokenni biror joyda saqlang

Wargaming

Bundan tashqari, Wargaming API-ga kirish uchun siz Wargaming-da dastur yaratishingiz kerak. Bu erda ham hamma narsa oddiy:

  1. Wargaming hisobingizga kiring ushbu havola orqali
  2. Biz "Mening ilovalarim" bo'limiga o'tamiz va "Yangi ilova qo'shish" tugmasini bosing, ilova nomini berib, uning turini tanlang.
  3. Ilova identifikatori saqlanmoqda

Dastur

Tanlov erkinligi allaqachon mavjud. Kimdir Visual Studio-dan, kimdir Rider-dan, kimdir odatda kuchli va Vim-da kod yozadi (axir, haqiqiy dasturchilar faqat klaviaturadan foydalanadilar, to'g'rimi?). Biroq, Discord API-ni qo'llamaslik uchun siz C# norasmiy "DSharpPlus" kutubxonasidan foydalanishingiz mumkin. U NuGet-dan yoki manbalarni o'zingiz ombordan qurish orqali o'rnatilishi mumkin.

NuGet'dan ilovalarni qanday o'rnatishni bilmagan yoki unutganlar uchun.Visual Studio uchun ko'rsatmalar

  1. Loyiha yorlig'iga o'ting - NuGet paketlarini boshqarish;
  2. Ko'rib chiqishni bosing va qidiruv maydoniga "DSharpPlus" ni kiriting;
  3. Ramkani tanlash va o'rnatish;
  4. FOYDA!

Tayyorgarlik bosqichi tugadi, siz bot yozishni davom ettirishingiz mumkin.

Mantiqni yozish

.NET Core-da VPS serveriga o'rnatish bilan Discord botini yaratish

Biz ilovaning butun mantig'ini ko'rib chiqmaymiz, men faqat bot tomonidan xabarlarni ushlash bilan qanday ishlashni va Wargaming API bilan qanday ishlashni ko'rsataman.

Discord boti bilan ishlash statik asinx Task MainTask(string[] args) orqali amalga oshiriladi;
Ushbu funktsiyani chaqirish uchun siz Main-da ro'yxatdan o'tishingiz kerak

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

Keyin botni ishga tushirishingiz kerak:

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

Token qayerda sizning botingiz tokenidir.
Keyin, lambda orqali biz bot bajarishi kerak bo'lgan kerakli buyruqlarni yozamiz:

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

Qayerda e.Author.Username foydalanuvchi taxallusini oladi.

Shunday qilib, & bilan boshlangan har qanday xabarni yuborganingizda, bot sizni salomlashadi.

Ushbu funktsiyaning oxirida await discord.ConnectAsync(); va Task.Delay (-1) ni kuting;

Bu sizga asosiy mavzuni olmasdan buyruqlarni fonda bajarish imkonini beradi.

Endi biz Wargaming API bilan shug'ullanishimiz kerak. Bu erda hamma narsa oddiy - CURL so'rovlarini yozing, JSON qatori shaklida javob oling, u yerdan kerakli ma'lumotlarni chiqarib oling va ular bilan manipulyatsiya qiling.

WargamingAPI bilan ishlashga misol

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;
        }

Diqqat! Barcha tokenlar va dastur identifikatorlarini aniq matnda saqlash qat'iyan tavsiya etilmaydi! Eng kamida, Discord bunday tokenlarni butun dunyo bo'ylab tarmoqqa kirishda taqiqlaydi va maksimal bo'lsa, bot tajovuzkorlar tomonidan foydalanila boshlaydi.

VPS - serverga o'rnatish

.NET Core-da VPS serveriga o'rnatish bilan Discord botini yaratish

Bot bilan ishlashni tugatganingizdan so'ng, u doimiy ravishda 24/7 ishlaydigan serverda joylashtirilishi kerak. Buning sababi, ilovangiz ishga tushganda, bot ham ishlaydi. Ilovani o'chirishingiz bilan botingiz ham uxlab qoladi.

Ko'pgina VPS serverlari bu dunyoda ham Windows, ham Linuxda mavjud, ammo ko'p hollarda Linuxda joylashtirish ancha arzon.

Discord serverida menga vscale.io ni maslahat berishdi va men darhol Ubuntuda virtual server yaratdim va botni yukladim. Men bu sayt qanday ishlashini tasvirlamayman, lekin to'g'ridan-to'g'ri bot sozlamalariga o'taman.

Avvalo, .NET Core-da yozilgan botimizni ishga tushiradigan kerakli dasturni o'rnatishingiz kerak. Buni qanday qilish bu erda tasvirlangan.

Keyinchalik, botni GitHub va shunga o'xshash xizmatlarga yuklashingiz va uni VPS serveriga klonlashingiz yoki botingizni boshqa yo'llar bilan yuklab olishingiz kerak. E'tibor bering, sizda faqat konsol bo'ladi, GUI yo'q. Umuman.

Botingizni yuklab olganingizdan so'ng, uni ishga tushirishingiz kerak. Buning uchun sizga kerak:

  • Barcha bog'liqliklarni tiklash: dotnet tiklash
  • Ilovani yaratish: dotnet build name_project.sln -c Reliz
  • O'rnatilgan DLL-ga o'ting;
  • dotnet name_of_file.dll

Tabriklaymiz! Sizning botingiz ishlayapti. Biroq, bot, afsuski, konsolni egallaydi va VPS serveridan chiqish oson emas. Bundan tashqari, server qayta ishga tushirilganda, siz botni yangi usulda ishga tushirishingiz kerak bo'ladi. Vaziyatdan chiqishning bir necha yo'li bor. Ularning barchasi serverni ishga tushirishda ishga tushirish bilan bog'liq:

  • Ishlash skriptini /etc/init.d ga qo'shing
  • Ishga tushganda ishlaydigan xizmat yarating.

Men ular haqida batafsil to'xtalib o'tishning ma'nosini ko'rmayapman, hamma narsa Internetda etarlicha batafsil tavsiflangan.

topilmalar

Men bu topshiriqni olganimdan xursandman. Bu mening botlarni yaratishda birinchi tajribam edi va men C# tilida yangi bilimlarga ega bo'lganimdan va Linux bilan ishlaganimdan xursandman.

Discord serveriga havola. Wargaming o'yinlarini o'ynaydiganlar uchun.
Discord boti joylashgan omborga havola.
DSharpPlus omboriga havola.
E'tiboringiz uchun tashakkur!

Manba: www.habr.com

a Izoh qo'shish