VPS serverinə yerləşdirmə ilə .NET Core-da Discord botunun yaradılması

VPS serverinə yerləşdirmə ilə .NET Core-da Discord botunun yaradılması

Salam Xabrovitlər!

Bu gün siz .NET Core-da C# istifadə edərək bot yaratmağı və onu uzaq serverdə necə işlətməyinizi göstərən məqaləni görəcəksiniz.

Məqalə fon, hazırlıq mərhələsi, məntiqin yazılması və botun uzaq serverə ötürülməsindən ibarət olacaq.

Ümid edirəm ki, bu məqalə bir çox yeni başlayanlara kömək edəcəkdir.

Prehistorya

Hər şey Discord serverində keçirdiyim yuxusuz bir payız gecəsində başladı. Bu yaxınlarda ona qoşulduğum üçün onu aşağı-yuxarı öyrənməyə başladım. "Vakansiyalar" mətn kanalını tapdıqdan sonra maraqlandım, onu açdım və məni maraqlandırmayan təkliflər arasından tapdım, bunlar:

"Proqramçı (bot inkişaf etdiricisi)
tələblər:

  • proqramlaşdırma dillərini bilmək;
  • öz-özünə öyrənmə qabiliyyəti.

Пожелания:

  • digər insanların kodunu başa düşmək bacarığı;
  • DISCORD funksionallığı haqqında biliklər.

Məqsədləri:

  • bot inkişafı;
  • botun dəstəklənməsi və saxlanması.

Faydanız:

  • Bəyəndiyiniz layihəni dəstəkləmək və təsir etmək imkanı;
  • Komandada işləmək təcrübəsi qazanmaq;
  • Mövcud bacarıqları nümayiş etdirmək və təkmilləşdirmək imkanı.


Bu dərhal məni maraqlandırdı. Bəli, onlar bu iş üçün pul ödəmədilər, amma sizdən heç bir öhdəlik tələb etmədilər və bu, portfeldə artıq olmaz. Buna görə də server admininə yazdım və o, World of Tanks-da oyunçunun statistikasını göstərəcək bir bot yazmağımı istədi.

Hazırlıq mərhələsi

VPS serverinə yerləşdirmə ilə .NET Core-da Discord botunun yaradılması
Discrod
Botu yazmağa başlamazdan əvvəl onu Discord üçün yaratmalıyıq. Sizə lazımdır:

  1. Discord hesabına daxil olun по ссылке
  2. "Proqramlar" sekmesinde, "Yeni proqram" düyməsini basın və botun adını verin
  3. Botunuza daxil olaraq və "Parametrlər" siyahısında "Bot" sekmesini tapmaqla bot nişanı əldə edin
  4. Tokeni bir yerdə saxlayın

Döyüş oyunları

Həmçinin, Wargaming API-ə daxil olmaq üçün Wargaming-də proqram yaratmalısınız. Burada da hər şey sadədir:

  1. Wargaming hesabınıza daxil olun bu link vasitəsilə
  2. "Mənim Proqramlarım" na gedirik və tətbiqin adını verərək növünü seçərək "Yeni proqram əlavə et" düyməsini sıxırıq.
  3. Tətbiq ID-sinin saxlanması

Proqram təminatı

Artıq seçim azadlığı var. Kimsə Visual Studio-dan, kimsə Rider-dən istifadə edir, kimsə ümumiyyətlə güclüdür və Vim-də kod yazır (axı, real proqramçılar yalnız klaviaturadan istifadə edirlər, elə deyilmi?). Bununla belə, Discord API tətbiq etməmək üçün qeyri-rəsmi C# kitabxanasından “DSharpPlus” istifadə edə bilərsiniz. Siz onu ya NuGet-dən quraşdıra bilərsiniz, ya da mənbələri depodan özünüz yarada bilərsiniz.

NuGet-dən proqramların necə qurulacağını bilməyən və ya unudanlar üçün.Visual Studio üçün təlimatlar

  1. Layihə sekmesine keçin - NuGet Paketlərini idarə edin;
  2. Baxışa vurun və axtarış sahəsinə “DSharpPlus” daxil edin;
  3. Çərçivəni seçin və quraşdırın;
  4. PROFIT!

Hazırlıq mərhələsi başa çatdı, botu yazmağa davam edə bilərsiniz.

Yazı məntiqi

VPS serverinə yerləşdirmə ilə .NET Core-da Discord botunun yaradılması

Tətbiqin bütün məntiqini nəzərdən keçirməyəcəyik, mən yalnız mesajların bot tərəfindən tutulması ilə necə işləməyi və Wargaming API ilə necə işləməyi göstərəcəyəm.

Discord botu ilə işləmək statik asinxron Task MainTask(string[] args) vasitəsilə baş verir;
Bu funksiyaya zəng etmək üçün Main-də qeydiyyatdan keçmək lazımdır

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

Sonra, botunuzu işə salmalısınız:

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

Token sizin botun əlamətidir.
Sonra lambda vasitəsilə botun yerinə yetirməli olduğu lazımi əmrləri yazırıq:

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

e.Author.Username istifadəçinin ləqəbini aldığı yerdən.

Beləliklə, & ilə başlayan hər hansı bir mesaj göndərdiyiniz zaman bot sizi salamlayacaq.

Bu funksiyanın sonunda await discord yazmalısınız.ConnectAsync(); və Task.Delay(-1) gözləyin;

Bu, əsas mövzunu götürmədən arxa planda əmrləri yerinə yetirməyə imkan verəcəkdir.

İndi Wargaming API ilə məşğul olmalıyıq. Burada hər şey sadədir - CURL sorğuları yazın, JSON sətri şəklində cavab alın, oradan lazımi məlumatları çıxarın və onlar üzərində manipulyasiyalar edin.

WargamingAPI ilə işləmək nümunəsi

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

Diqqət! Bütün tokenləri və proqram identifikatorlarını aydın mətndə saxlamaq qətiyyən tövsiyə edilmir! Ən azı, Discord bu cür tokenləri dünya şəbəkəsinə daxil olduqda qadağan edir və maksimumda bot təcavüzkarlar tərəfindən istifadə olunmağa başlayır.

VPS - serverə yerləşdirin

VPS serverinə yerləşdirmə ilə .NET Core-da Discord botunun yaradılması

Botla işiniz bitdikdən sonra o, daim 24/7 işləyən serverdə yerləşdirilməlidir. Bu, tətbiqiniz işləyərkən botun da işləməsi ilə əlaqədardır. Proqramı söndürən kimi sizin botunuz da yuxuya gedir.

Bu dünyada həm Windows, həm də Linux-da bir çox VPS serverləri mövcuddur, lakin əksər hallarda Linux-da yerləşdirmək daha ucuz başa gəlir.

Discord serverində mənə vscale.io məsləhət gördü və mən dərhal Ubuntu-da virtual server yaratdım və botu yüklədim. Bu saytın necə işlədiyini təsvir etməyəcəyəm, ancaq birbaşa bot parametrlərinə keçəcəyəm.

İlk növbədə, .NET Core-da yazılmış botumuzu işlədəcək lazımi proqram təminatını quraşdırmalısınız. Bunu necə etmək burada təsvir edilmişdir.

Daha sonra siz botu GitHub və bənzəri kimi Git xidmətinə yükləməli və onu VPS serverinə klonlamalı və ya botunuzu başqa yollarla endirməlisiniz. Nəzərə alın ki, sizdə yalnız konsol olacaq, GUI olmayacaq. Bütün.

Botunuzu yüklədikdən sonra onu işə salmalısınız. Bunun üçün sizə lazımdır:

  • Bütün asılılıqları bərpa edin: dotnet bərpa edin
  • Tətbiq qurun: dotnet build name_project.sln -c Buraxılış
  • Quraşdırılmış DLL-ə keçin;
  • dotnet name_of_file.dll

Təbrik edirik! Botunuz işləyir. Bununla belə, bot, təəssüf ki, konsolu tutur və VPS serverindən çıxmaq asan deyil. Həmçinin, serverin yenidən işə salınması halında siz botu yeni şəkildə işə salmalı olacaqsınız. Vəziyyətdən bir neçə çıxış yolu var. Hamısı serverin işə salınması ilə əlaqədardır:

  • /etc/init.d-ə run skript əlavə edin
  • Başlanğıcda işləyəcək bir xidmət yaradın.

Onların üzərində ətraflı dayanmağın mənasını görmürəm, hər şey İnternetdə kifayət qədər ətraflı təsvir edilmişdir.

Tapıntılar

Bu tapşırığı öhdəmə götürdüyümə görə şadam. Bu, mənim ilk bot inkişaf təcrübəm idi və mən şadam ki, C# dilində yeni biliklər əldə etdim və Linux ilə işlədim.

Discord serverinə keçid. Wargaming oyunları oynayanlar üçün.
Discord botunun yerləşdiyi depoya keçid.
DSharpPlus deposuna keçid.
Diqqətiniz üçün təşəkkür edirik!

Mənbə: www.habr.com

Добавить комментарий