
Salam, Habr oxucuları!
Bugün siz C# dilindən istifadə edərək .NET Core-da bot yaratmağın yolları və onu uzaq serverdə işlətməyin yolları ilə tanış olacaqsınız.
Məqalə arxa plan, hazırlıq mərhələsi, məntiqin yazılması və botun uzaq serverə köçürülməsi ilə bağlı olacaq.
Ümid edirəm ki, bu məqalə bir çox yeni başlayanlara kömək edəcək.
Tarixçə
Hər şey bir yuxusuz payız gecəsi başladı, onu Discord serverində keçirirdim. Serverə nisbətən yeni qoşulduğum üçün onu dərindən öyrənməyə başladım. "İş İlanları" adlı yazışma kanalını tapdıqda, maraqlandım, onun üzərinə tıkladım və maraqlandığım təkliflər arasında axtardım.
«Proqramçı (bot inkişaf etdirən)"
Tələblər:
- proqramlaşdırma dillərini bilmək;
- öyrənmə qabiliyyəti.
Arzu olunanlar:
- başqa birinin kodunu başa düşmək bacarığı;
- DISCORD funksionallığı haqqında bilik.
Tapşırıqlar:
- botun hazırlanması;
- botun dəstəklənməsi və işinin saxlanması.
Sizin faydanız:
- bəyəndiyiniz layihəni dəstəkləyib ona təsir etmək imkanı;
- komanda şəklində iş təcrübəsi qazanmaq;
- mövcud bacarıqları nümayiş etdirmək və onları artırmaq imkanı.”
Bu, dərhal marağımı cəlb etdi. Bəli, bu iş üçün pul verilmir, lakin sizdən heç bir öhdəlik tələb olunmur və portfel üçün də faydalı olacaq. Buna görə serverin admininə yazdım, o da World of Tanks-da oyunçunun statistikalarını göstərən bir bot yazmağı istədi.
Hazırlıq mərhələsi

Discord
Botumuzu yazmağa başlamazdan əvvəl, onu Discord üçün yaratmalıyıq. Bunun üçün sizə lazım olacaq:
- Discord hesabınıza daxil olun
- "Applications" sekmesinde "New Application" düyməsinə basın və botu adlandırın
- Botunuzun tokenini əldə edin, botunuza daxil olun və "Settings" bölməsində "Bot" sekmesini tapın
- Tokeni bir yerə saxlayın
Wargaming
Həmçinin, Wargaming API-yə giriş əldə etmək üçün Wargaming-də bir tətbiq yaratmalısınız. Burada da hər şey sadədir:
- Wargaming hesabınıza daxil olun
- «Mənim Tətbiqlərim» bölməsinə daxil olun və "Yeni tətbiq əlavə et" düyməsinə basın, tətbiqə ad verin və onun tipini seçin
- Tətbiqin ID-sini saxlayın
Proqram təminatı
Burada seçim azadlığı var. Bəziləri Visual Studio istifadə edir, bəziləri Rider, bəziləri isə qeyd etdiyim Vim-də yazır (gerçək proqramçılar yalnız klaviaturadan istifadə edir, düzdür?). Ancak, Discord API olduğunu həyata keçirməmək üçün C# üçün qeyri-rəsmi "DSharpPlus" kitabxanasını istifadə edə bilərsiniz. Onu ya NuGet-dən qura bilərsiniz, ya da mənbələri repositoriyadan özünüz toplayaraq.
Bilmirəm və ya unutmusunuzsa, NuGet-dən tətbiqləri necə quraşdırıldığını.Visual Studio üçün təlimat
- Layihə sekmesine keçin – NuGet paketlərini idarə et;
- Baxışa basın və axtarış sahəsində "DSharpPlus" yazın;
- Seçin və framework-u quraşdırın;
- DALAN!
Hazırlıq mərhələsi başa çatdı, bot yazılmasına keçə bilərsiniz.
Mantiq yazma

Tətbiqin bütün mantığını nəzərdən keçirməyəcəyik, yalnız botun mesajları tutma üsulu ilə Wargaming API ilə necə işləməyi göstərəcəyəm.
Discord botu ilə iş static async Task MainTask(string[] args); funksiyası vasitəsilə həyata keçirilir.
Bu funksiyanı çağırmaq üçün Main metodunda yazmaq lazımdır
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Sonra botunuzu başlatmalısınız:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Burada token – sizin botunuzun tokenidir.
Sonra bir lambda vasitəsilə botun yerinə yetirməli olduğu əmrləri yazırıq:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync("Salam, " + e.Author.Username);
}
};
Burada e.Author.Username – istifadəçi adını əldə etməkdir.
Beləliklə, siz & ilə başlayan hər hansı bir mesaj göndərdiyinizdə, bot sizi salamlayacaq.
Bu funksiyanın sonunda await discord.ConnectAsync(); və await Task.Delay(-1); yazmalısınız.
Bu, əmrlərin arxa planda icra edilməsinə imkan tanıyır, əsas prosesi zəbt etmir.
İndi Wargaming API ilə tanış olmalıyıq. Burada hər şey sadədir – CURL sorğularını yazırsınız, JSON formatında cavab alırsınız – oradan lazım olan məlumatları çıxarıb üzərində manipulyasiyalar aparırsınız.
WargamingAPI ilə işin nümunəsi
public Player FindPlayer(string searchNickname)
{
//https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3&search=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("Oyunçu tapılmadı");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Minimum üç simvol tələb olunur");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Yanlış axtarış");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Boş istifadəçi adı");
}
else
{
throw new Exception("Bir şey səhv oldu.");
}
}
return player;
}
Diqqət! Bütün tokenləri və tətbiq ID-lərini açıq şəkildə saxlamaq qətiyyətlə tövsiyə edilmir! Ən azından – Discord belə tokenləri dünya şəbəkəsinə düşdükdə blok edir, maksimum isə – botdan zərərli mühit istifadə edə bilər.
VPS-yə yerləşdirmə – server

Botu tamamladıqdan sonra, onu 24/7 işləyən bir serverə yerləşdirmək lazımdır. Bu, tətbiqiniz işlədikcə botun da işləməsi ilə bağlıdır. Tətbiqi söndürdükdə, botunuz da yuxuya gedir.
Dünyada həm Windows, həm də Linux üçün bir çox VPS serveri mövcuddur, lakin əksər hallarda Linux-da yerləşdirmə çox daha ucuzdur.
Discord serverində mənə vscale.io tövsiyə etdilər və dərhal orada Ubuntu üzərində virtual server yaratdım və botu yüklədim. Saytın necə işlədiyini təsvir etməyəcəyəm, birbaşa botun konfiqurasiyasına keçəcəyəm.
İlk öncə, .NET Core-da yazılmış botumuzu işə salmaq üçün lazım olan proqram təminatını quraşdırmalısınız. .
Sonra botu Git kimi bir servisə yükləməlisiniz, məsələn GitHub və buna bənzərləri, və onu VPS serverinə klonlamalısınız ya da botunuzu digər yollarla yükləməlisiniz. Qeyd edin ki, yalnız konsol olacaq, GUI olmayacaq.
Botunuzu yüklədikdən sonra işə salmalısınız. Bunun üçün sizə lazım olacaq:
- Bütün asılılıqları bərpa et: dotnet restore
- Tətbiqi qur: dotnet build name_project.sln -c Release
- Qurulmuş DLL-ə keçin;
- dotnet name_of_file.dll
Təbrik edirəm! Botunuz işlədi. Ancaq, bot konsolu tutduğu üçün VPS serverindən çıxmaq asan olmayacaq. Həmçinin, server yenidən başladıqda, botu yenidən işə salmaq lazım olacaq. Bu vəziyyətdən çıxmanın bir neçə yolu var. Hamısı server başlayanda işə salmaqla bağlıdır:
- Skripti /etc/init.d-ə əlavə edin.
- Başlayanda işə salınacaq bir xidmət yaradın.
Onlar üzərində ətraflı dayanmağı məqbul görmürəm, internetdə kifayət qədər ətraflı məlumat mövcuddur.
Sonuçlar
Bu tapşırığı götürdüyüm üçün mütləq sevinirəm. Bu, mənim bot yaradılması ilə ilk təcrübəm idi və C# və Linux ilə işləməyi öyrəndiyim üçün xoşbəxtəm.
Discord serverinə link.
Diqqətiniz üçün təşəkkür edirəm!
Mənbə: habr.com
