Discord botunu .NET Core-da yaratmaq və VPS-serverə yerləşdirmək

Discord botunu .NET Core-da yaratmaq və VPS-serverə yerləşdirmək

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 botunu .NET Core-da yaratmaq və VPS-serverə yerləşdirmək
Discord
Botumuzu yazmağa başlamazdan əvvəl, onu Discord üçün yaratmalıyıq. Bunun üçün sizə lazım olacaq:

  1. Discord hesabınıza daxil olun baxmaq mümkündür.
  2. "Applications" sekmesinde "New Application" düyməsinə basın və botu adlandırın
  3. Botunuzun tokenini əldə edin, botunuza daxil olun və "Settings" bölməsində "Bot" sekmesini tapın
  4. 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:

  1. Wargaming hesabınıza daxil olun bu linkdən
  2. «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
  3. 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

  1. Layihə sekmesine keçin – NuGet paketlərini idarə et;
  2. Baxışa basın və axtarış sahəsində "DSharpPlus" yazın;
  3. Seçin və framework-u quraşdırın;
  4. DALAN!

Hazırlıq mərhələsi başa çatdı, bot yazılmasına keçə bilərsiniz.

Mantiq yazma

Discord botunu .NET Core-da yaratmaq və VPS-serverə yerləşdirmək

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

Discord botunu .NET Core-da yaratmaq və VPS-serverə yerləşdirmək

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. Bunu necə edəcəyiniz burada təsvir olunub..

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. Wargaming oyunlarını oynayanlar üçün.
Discord botunun yerləşdiyi depo linki.
DSharpPlus deposunun linki.
Diqqətiniz üçün təşəkkür edirəm!

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster