
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

Diskrod
Botimizni yozishni boshlashdan oldin uni Discord uchun yaratishimiz kerak. Senga kerak:
- Discord hisobiga kiring
- "Ilovalar" yorlig'ida "Yangi dastur" tugmasini bosing va botga nom bering
- Botga kirish va "Sozlamalar" ro'yxatidagi "Bot" yorlig'ini topish orqali bot tokenini oling.
- Tokenni biror joyda saqlang
Wargaming
Bundan tashqari, Wargaming API-ga kirish uchun siz Wargaming-da dastur yaratishingiz kerak. Bu erda ham hamma narsa oddiy:
- Wargaming hisobingizga kiring
- Biz "Mening ilovalarim" bo'limiga o'tamiz va "Yangi ilova qo'shish" tugmasini bosing, ilova nomini berib, uning turini tanlang.
- 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
- Loyiha yorlig'iga o'ting - NuGet paketlarini boshqarish;
- Ko'rib chiqishni bosing va qidiruv maydoniga "DSharpPlus" ni kiriting;
- Ramkani tanlash va o'rnatish;
- FOYDA!
Tayyorgarlik bosqichi tugadi, siz bot yozishni davom ettirishingiz mumkin.
Mantiqni yozish

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

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.
Много VPS серверов существует на этом свете, как на Windowsva boshqalar Linux, однако в большинстве случаев, на Linux в разы дешевле размещать.
На Discord – сервере мне посоветовали vscale.io, и я тут же создал на нем виртуальный сервер на Ubuntu и залил бота. Я не буду описывать, как работает данный сайт, а сразу перейду к настройки бота.
Avvalo, .NET Core-da yozilgan botimizni ishga tushiradigan kerakli dasturni o'rnatishingiz kerak. .
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
Я рад, что я взялся за это задание. Это был мой первый опыт разработки бота, и рад, что получил новые знания по C#, и работе с Linux.
Discord serveriga havola.
E'tiboringiz uchun tashakkur!
Manba: www.habr.com
