إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS

إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS

مرحبا خابروفيتس!

سترى اليوم مقالًا يوضح لك كيفية إنشاء روبوت باستخدام C # على .NET Core وكيفية تشغيله على خادم بعيد.

ستتألف المقالة من خلفية ومرحلة تحضيرية ومنطق كتابة ونقل الروبوت إلى خادم بعيد.

آمل أن تساعد هذه المقالة العديد من المبتدئين.

قبل التاريخ

بدأ كل شيء في ليلة خريفية بلا نوم قضيتها على خادم Discord. منذ أن انضممت إليه مؤخرًا ، بدأت في دراسته صعودًا وهبوطًا. بعد أن وجدت القناة النصية "وظائف شاغرة" أصبحت مهتمة وفتحتها ووجدت من بين العروض التي لم تعجبني هذه:

"مبرمج (bot developer)
المتطلبات:

  • معرفة لغات البرمجة.
  • القدرة على التعلم الذاتي.

: أمنيات

  • القدرة على فهم كود الآخرين ؛
  • معرفة وظائف DISCORD.

الأهداف:

  • تطوير الروبوت
  • دعم وصيانة الروبوت.

مصلحتك:

  • فرصة لدعم المشروع الذي تريده والتأثير فيه ؛
  • اكتساب خبرة العمل في فريق.
  • فرصة لإظهار وتحسين المهارات الحالية.


هذا أثار اهتمامي على الفور. نعم ، لم يدفعوا مقابل هذا العمل ، لكنهم لم يطلبوا منك أي التزامات ، ولن يكون الأمر غير ضروري في المحفظة. لذلك ، كتبت إلى مسؤول الخادم ، وطلب مني كتابة روبوت يعرض إحصائيات اللاعب في World of Tanks.

المرحلة التحضيرية

إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS
القرص
قبل أن نبدأ في كتابة الروبوت الخاص بنا ، نحتاج إلى إنشائه لـ Discord. انت تحتاج:

  1. تسجيل الدخول إلى حساب Discord رابط
  2. في علامة التبويب "التطبيقات" ، انقر فوق الزر "تطبيق جديد" وقم بتسمية الروبوت
  3. احصل على رمز bot عن طريق تسجيل الدخول إلى برنامج الروبوت الخاص بك والعثور على علامة التبويب "Bot" في قائمة "الإعدادات"
  4. احفظ الرمز في مكان ما

Wargaming

تحتاج أيضًا إلى إنشاء تطبيق في Wargaming للوصول إلى Wargaming API. هنا أيضًا ، كل شيء بسيط:

  1. تسجيل الدخول إلى حساب Wargaming الخاص بك بواسطة هذا الارتباط
  2. نذهب إلى "تطبيقاتي" ونضغط على زر "إضافة تطبيق جديد" ، ونعطي اسم التطبيق ونختار نوعه
  3. حفظ معرف التطبيق

تطبيقات الكمبيوتر

هناك بالفعل حرية الاختيار. شخص ما يستخدم Visual Studio ، شخص ما رايدر ، شخص ما قوي بشكل عام ، ويكتب رمزًا في Vim (بعد كل شيء ، يستخدم المبرمجون الحقيقيون لوحة المفاتيح فقط ، أليس كذلك؟). ومع ذلك ، من أجل عدم تنفيذ Discord API ، يمكنك استخدام مكتبة C # غير الرسمية “DSharpPlus”. يمكنك تثبيته إما من NuGet ، أو عن طريق بناء المصادر بنفسك من المستودع.

بالنسبة لأولئك الذين لا يعرفون أو نسوا كيفية تثبيت التطبيقات من NuGet.تعليمات لبرنامج Visual Studio

  1. انتقل إلى علامة التبويب مشروع - إدارة حزم NuGet ؛
  2. انقر فوق المراجعة وفي حقل البحث أدخل "DSharpPlus" ؛
  3. اختيار وتثبيت الإطار ؛
  4. ربح!

انتهت المرحلة التحضيرية ، يمكنك المتابعة لكتابة الروبوت.

منطق الكتابة

إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS

لن نأخذ في الاعتبار منطق التطبيق بالكامل ، وسأوضح فقط كيفية التعامل مع اعتراض الرسائل بواسطة الروبوت ، وكيفية العمل مع Wargaming API.

يحدث العمل مع روبوت Discord من خلال المهمة الرئيسية غير المتزامنة الثابتة (سلسلة [] args) ؛
لاستدعاء هذه الوظيفة ، تحتاج إلى التسجيل في Main

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

بعد ذلك ، تحتاج إلى تهيئة الروبوت الخاص بك:

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

أين الرمز المميز هو رمز الروبوت الخاص بك.
ثم ، من خلال lambda ، نكتب الأوامر اللازمة التي يجب على الروبوت تنفيذها:

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

حيث يحصل e.Author.username على لقب المستخدم.

بهذه الطريقة ، عندما ترسل أي رسالة تبدأ بـ & ، سيرحب بك الروبوت.

في نهاية هذه الوظيفة ، يجب أن تكتب انتظار 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

بمجرد الانتهاء من استخدام الروبوت ، يجب استضافته على خادم يعمل باستمرار على مدار الساعة طوال أيام الأسبوع. هذا يرجع إلى حقيقة أنه عند تشغيل التطبيق الخاص بك ، فإن الروبوت يعمل أيضًا. بمجرد إيقاف تشغيل التطبيق ، ينام الروبوت أيضًا.

توجد العديد من خوادم VPS في هذا العالم ، سواء على نظامي التشغيل Windows أو Linux ، ومع ذلك ، في معظم الحالات ، يكون الاستضافة على نظام Linux أرخص بكثير.

على خادم Discord ، تم إخباري بـ vscale.io ، وأنشأت على الفور خادمًا افتراضيًا على Ubuntu وقمت بتحميل الروبوت. لن أصف كيفية عمل هذا الموقع ، لكنني سأنتقل مباشرة إلى إعدادات الروبوت.

بادئ ذي بدء ، تحتاج إلى تثبيت البرنامج الضروري الذي سيقوم بتشغيل الروبوت الخاص بنا المكتوب في .NET Core. كيفية القيام بذلك موصوفة هنا.

بعد ذلك ، تحتاج إلى تحميل الروبوت إلى خدمة Git ، مثل GitHub وما شابه ، واستنساخه على خادم VPS ، أو تنزيل الروبوت الخاص بك بطرق أخرى. يرجى ملاحظة أنه سيكون لديك وحدة تحكم فقط ، بدون واجهة مستخدم رسومية. على الاطلاق.

بعد تنزيل الروبوت الخاص بك ، تحتاج إلى تشغيله. لهذا تحتاج:

  • استعادة جميع التبعيات: استعادة dotnet
  • تطبيق البناء: dotnet build name_project.sln -c Release
  • انتقل إلى DLL المدمج ؛
  • الدوت نت name_of_file.dll

تهانينا! الروبوت الخاص بك قيد التشغيل. ومع ذلك ، فإن الروبوت ، للأسف ، يشغل وحدة التحكم ، وليس من السهل الخروج من خادم VPS. أيضًا ، في حالة إعادة تشغيل الخادم ، سيتعين عليك بدء تشغيل الروبوت بطريقة جديدة. هناك طريقتان للخروج من الموقف. كل منهم مرتبط بالتشغيل عند بدء تشغيل الخادم:

  • أضف البرنامج النصي للتشغيل إلى /etc/init.d
  • أنشئ خدمة تعمل عند بدء التشغيل.

لا أرى الهدف من الخوض فيها بالتفصيل ، كل شيء موصوف بالتفصيل الكافي على الإنترنت.

النتائج

أنا سعيد لأنني توليت هذه المهمة. كانت هذه أول تجربة لي في تطوير الروبوتات ، ويسعدني أنني حصلت على معرفة جديدة في C # ، والعمل مع Linux.

رابط إلى خادم Discord. بالنسبة لأولئك الذين يلعبون ألعاب Wargaming.
رابط إلى المستودع حيث يوجد برنامج Discord bot.
الارتباط بمستودع DSharpPlus.
شكرا لك!

المصدر: www.habr.com

إضافة تعليق