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



مرحبا ، خابروفشان!

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

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

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

قبل التاريخ


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

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

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

الاقتراحات:

  • القدرة على فهم رمز شخص آخر ؛
  • معرفة وظيفة DISCORD.

الأهداف:

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

صالحك:

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


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

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



Discrod
قبل البدء في كتابة روبوتنا ، تحتاج إلى إنشائه لـ Discord. تحتاج إلى:

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

Wargaming

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

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

البرمجيات

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

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

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


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

هجاء المنطق




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

يحدث العمل مع روبوت Discord من خلال الدالة 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 }); 

حيث الرمز المميز هو رمز الروبوت الخاص بك.
ثم ، من خلال 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. كل شيء بسيط هنا - اكتب طلبات 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




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

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

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

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

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

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

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

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

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

لا أرى النقطة في تفصيلها ؛ فكل شيء موصوف بتفاصيل كافية على الإنترنت.

النتائج


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

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

Source: https://habr.com/ru/post/ar479180/


All Articles