ایجاد ربات Discord در NET Core با استقرار در سرور VPS

ایجاد ربات Discord در NET Core با استقرار در سرور VPS

سلام خابرووی ها!

امروز مقاله ای را مشاهده خواهید کرد که نحوه ایجاد ربات با استفاده از سی شارپ در NET Core و نحوه اجرای آن بر روی یک سرور راه دور را به شما نشان می دهد.

این مقاله شامل یک پس زمینه، مرحله آماده سازی، نوشتن منطق و انتقال ربات به یک سرور راه دور خواهد بود.

امیدوارم این مقاله به بسیاری از مبتدیان کمک کند.

ماقبل تاریخ

همه چیز از یک شب بی خوابی پاییزی شروع شد که من در سرور Discord گذراندم. از زمانی که اخیراً به او پیوستم، شروع به مطالعه بالا و پایین کردم. با پیدا کردن کانال متنی "جاهای خالی"، علاقه مند شدم، آن را باز کردم و در میان پیشنهاداتی که به من علاقه نداشتند، اینها هستند:

برنامه نویس (توسعه دهنده ربات)
مورد نیاز:

  • دانش زبان های برنامه نویسی؛
  • توانایی خودآموزی

Пожелания:

  • توانایی درک کد دیگران؛
  • دانش عملکرد DISCORD

اهداف:

  • توسعه ربات؛
  • پشتیبانی و نگهداری از ربات

سود شما:

  • فرصتی برای حمایت و تأثیرگذاری بر پروژه ای که دوست دارید؛
  • کسب تجربه کار تیمی؛
  • فرصتی برای نشان دادن و بهبود مهارت های موجود.


این بلافاصله من را جالب کرد. بله، آنها برای این کار پولی پرداخت نکردند، اما هیچ تعهدی از شما نخواستند، و در نمونه کارها اضافی نخواهد بود. از این رو با ادمین سرور مکاتبه کردم و او از من خواست رباتی بنویسم که آمار بازیکن را در World of Tanks نشان دهد.

مرحله مقدماتی

ایجاد ربات Discord در NET Core با استقرار در سرور VPS
تفکیک کنید
قبل از شروع نوشتن ربات خود، باید آن را برای Discord ایجاد کنیم. تو نیاز داری:

  1. وارد حساب Discord شوید по ссылке
  2. در تب "برنامه ها" روی دکمه "برنامه جدید" کلیک کنید و نام ربات را بگذارید
  3. با وارد شدن به ربات خود و پیدا کردن برگه "ربات" در لیست "تنظیمات" یک نشانه ربات دریافت کنید.
  4. توکن را در جایی ذخیره کنید

بازی جنگی

همچنین، برای دسترسی به Wargaming API باید یک اپلیکیشن در Wargaming ایجاد کنید. در اینجا نیز همه چیز ساده است:

  1. وارد حساب Wargaming خود شوید توسط این لینک
  2. به "برنامه های من" می رویم و روی دکمه "افزودن برنامه جدید" کلیک می کنیم و نام برنامه را می دهیم و نوع آن را انتخاب می کنیم.
  3. ذخیره شناسه برنامه

نرم افزار

در حال حاضر آزادی انتخاب وجود دارد. یک نفر از ویژوال استودیو استفاده می کند، یک نفر از Rider، یک نفر به طور کلی قدرتمند است و کد را در Vim می نویسد (در نهایت، برنامه نویسان واقعی فقط از صفحه کلید استفاده می کنند، درست است؟). با این حال، برای اینکه Discord API را پیاده سازی نکنید، می توانید از کتابخانه غیر رسمی سی شارپ "DSharpPlus" استفاده کنید. می توانید آن را از NuGet یا با ساختن منابع خود از مخزن نصب کنید.

برای کسانی که نمی دانند یا فراموش کرده اند که چگونه برنامه های NuGet را نصب کنند.دستورالعمل های ویژوال استودیو

  1. به برگه Project - Manage NuGet Packages بروید.
  2. روی بررسی کلیک کنید و در قسمت جستجو "DSharpPlus" را وارد کنید.
  3. انتخاب و نصب چارچوب؛
  4. سود!

مرحله آماده سازی به پایان رسیده است، می توانید به نوشتن ربات ادامه دهید.

منطق نوشتن

ایجاد ربات Discord در NET Core با استقرار در سرور VPS

ما کل منطق برنامه را در نظر نخواهیم گرفت، من فقط نحوه کار با رهگیری پیام ها توسط ربات و نحوه کار با Wargaming API را نشان خواهم داد.

کار با ربات Discord از طریق Static async Task MainTask(string[] args) انجام می شود.
برای فراخوانی این تابع، در Main باید ثبت نام کنید

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

در مرحله بعد، باید ربات خود را مقداردهی اولیه کنید:

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

کجا توکن توکن ربات شماست.
سپس از طریق لامبدا دستورات لازم را که ربات باید اجرا کند را می نویسیم:

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

جایی که e.Author.Username نام مستعار کاربر را دریافت می کند.

به این ترتیب، وقتی هر پیامی که با & شروع می شود ارسال می کنید، ربات به شما سلام می کند.

در پایان این تابع، باید await discord را بنویسید.ConnectAsync(); و منتظر Task.Delay(-1);

این به شما امکان می دهد دستورات را در پس زمینه بدون گرفتن رشته اصلی اجرا کنید.

اکنون باید با Wargaming API مقابله کنیم. همه چیز در اینجا ساده است - درخواست های CURL را بنویسید، پاسخی را در قالب یک رشته JSON دریافت کنید، داده های لازم را از آنجا بیرون بکشید و روی آنها دستکاری کنید.

نمونه ای از کار با WargamingAPI

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

توجه! اکیداً توصیه نمی شود که همه توکن ها و شناسه های برنامه را در متن واضح ذخیره کنید! حداقل، Discord چنین توکن هایی را هنگامی که وارد شبکه جهانی می شوند ممنوع می کند، و حداکثر، ربات شروع به استفاده توسط مهاجمان می کند.

به سرور VPS مستقر شود

ایجاد ربات Discord در NET Core با استقرار در سرور VPS

هنگامی که کار با ربات تمام شد، باید روی سروری میزبانی شود که دائماً 24/7 در حال اجرا است. این به این دلیل است که وقتی برنامه شما در حال اجرا است، ربات نیز در حال اجرا است. به محض خاموش کردن برنامه، ربات شما نیز به خواب می رود.

سرورهای VPS زیادی در این دنیا وجود دارند، هم در ویندوز و هم در لینوکس، با این حال، در اکثر موارد، میزبانی در لینوکس بسیار ارزان‌تر است.

در سرور Discord، vscale.io به من توصیه شد، و من بلافاصله یک سرور مجازی در اوبونتو روی آن ایجاد کردم و ربات را آپلود کردم. من نحوه کار این سایت را توضیح نمی دهم، اما مستقیماً به تنظیمات ربات می روم.

اول از همه، شما باید نرم افزار لازم را نصب کنید که ربات ما را که با .NET Core نوشته شده است اجرا کند. نحوه انجام آن در اینجا توضیح داده شده است.

در مرحله بعد، باید ربات را در یک سرویس Git آپلود کنید، مانند GitHub و مانند آن، و آن را در یک سرور VPS کلون کنید، یا ربات خود را به روش های دیگر دانلود کنید. لطفا توجه داشته باشید که شما فقط یک کنسول خواهید داشت، بدون رابط کاربری گرافیکی. اصلا

بعد از اینکه ربات خود را دانلود کردید، باید آن را اجرا کنید. برای این، شما نیاز دارید:

  • بازیابی همه وابستگی ها: بازیابی dotnet
  • ساخت اپلیکیشن: dotnet build name_project.sln -c Release
  • به DLL ساخته شده بروید.
  • dotnet name_of_file.dll

تبریک می گویم! ربات شما در حال اجرا است. با این حال، ربات، متأسفانه، کنسول را اشغال می کند و خروج از سرور VPS آسان نیست. همچنین در صورت راه اندازی مجدد سرور، باید ربات را به روشی جدید راه اندازی کنید. چند راه برای خروج از این وضعیت وجود دارد. همه آنها مربوط به راه اندازی در هنگام راه اندازی سرور هستند:

  • اسکریپت اجرا را به /etc/init.d اضافه کنید
  • سرویسی ایجاد کنید که در هنگام راه اندازی اجرا شود.

من اهمیتی در پرداختن به جزئیات آنها نمی بینم، همه چیز با جزئیات کافی در اینترنت توضیح داده شده است.

یافته ها

خوشحالم که این وظیفه را بر عهده گرفتم. این اولین تجربه توسعه ربات من بود و خوشحالم که دانش جدیدی در C # و کار با لینوکس به دست آوردم.

پیوند به سرور Discord. برای کسانی که بازی های Wargaming را انجام می دهند.
به مخزنی که ربات Discord در آن قرار دارد پیوند دهید.
پیوند به مخزن DSharpPlus.
با تشکر از شما!

منبع: www.habr.com

اضافه کردن نظر