ProHoster > بلوق > إدارة > إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS
إنشاء روبوت Discord على .NET Core مع النشر إلى خادم VPS
مرحبا خابروفيتس!
سترى اليوم مقالًا يوضح لك كيفية إنشاء روبوت باستخدام C # على .NET Core وكيفية تشغيله على خادم بعيد.
ستتألف المقالة من خلفية ومرحلة تحضيرية ومنطق كتابة ونقل الروبوت إلى خادم بعيد.
آمل أن تساعد هذه المقالة العديد من المبتدئين.
قبل التاريخ
بدأ كل شيء في ليلة خريفية بلا نوم قضيتها على خادم Discord. منذ أن انضممت إليه مؤخرًا ، بدأت في دراسته صعودًا وهبوطًا. بعد أن وجدت القناة النصية "وظائف شاغرة" أصبحت مهتمة وفتحتها ووجدت من بين العروض التي لم تعجبني هذه:
"مبرمج (bot developer) المتطلبات:
معرفة لغات البرمجة.
القدرة على التعلم الذاتي.
: أمنيات
القدرة على فهم كود الآخرين ؛
معرفة وظائف DISCORD.
الأهداف:
تطوير الروبوت
دعم وصيانة الروبوت.
مصلحتك:
فرصة لدعم المشروع الذي تريده والتأثير فيه ؛
اكتساب خبرة العمل في فريق.
فرصة لإظهار وتحسين المهارات الحالية.
هذا أثار اهتمامي على الفور. نعم ، لم يدفعوا مقابل هذا العمل ، لكنهم لم يطلبوا منك أي التزامات ، ولن يكون الأمر غير ضروري في المحفظة. لذلك ، كتبت إلى مسؤول الخادم ، وطلب مني كتابة روبوت يعرض إحصائيات اللاعب في World of Tanks.
المرحلة التحضيرية
القرص
قبل أن نبدأ في كتابة الروبوت الخاص بنا ، نحتاج إلى إنشائه لـ Discord. انت تحتاج:
نذهب إلى "تطبيقاتي" ونضغط على زر "إضافة تطبيق جديد" ، ونعطي اسم التطبيق ونختار نوعه
حفظ معرف التطبيق
تطبيقات الكمبيوتر
هناك بالفعل حرية الاختيار. شخص ما يستخدم Visual Studio ، شخص ما رايدر ، شخص ما قوي بشكل عام ، ويكتب رمزًا في Vim (بعد كل شيء ، يستخدم المبرمجون الحقيقيون لوحة المفاتيح فقط ، أليس كذلك؟). ومع ذلك ، من أجل عدم تنفيذ Discord API ، يمكنك استخدام مكتبة C # غير الرسمية “DSharpPlus”. يمكنك تثبيته إما من NuGet ، أو عن طريق بناء المصادر بنفسك من المستودع.
بالنسبة لأولئك الذين لا يعرفون أو نسوا كيفية تثبيت التطبيقات من NuGet.تعليمات لبرنامج Visual Studio
انتقل إلى علامة التبويب مشروع - إدارة حزم NuGet ؛
انقر فوق المراجعة وفي حقل البحث أدخل "DSharpPlus" ؛
اختيار وتثبيت الإطار ؛
ربح!
انتهت المرحلة التحضيرية ، يمكنك المتابعة لكتابة الروبوت.
منطق الكتابة
لن نأخذ في الاعتبار منطق التطبيق بالكامل ، وسأوضح فقط كيفية التعامل مع اعتراض الرسائل بواسطة الروبوت ، وكيفية العمل مع Wargaming API.
يحدث العمل مع روبوت Discord من خلال المهمة الرئيسية غير المتزامنة الثابتة (سلسلة [] args) ؛
لاستدعاء هذه الوظيفة ، تحتاج إلى التسجيل في Main
أين الرمز المميز هو رمز الروبوت الخاص بك.
ثم ، من خلال 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 - الخادم
بمجرد الانتهاء من استخدام الروبوت ، يجب استضافته على خادم يعمل باستمرار على مدار الساعة طوال أيام الأسبوع. هذا يرجع إلى حقيقة أنه عند تشغيل التطبيق الخاص بك ، فإن الروبوت يعمل أيضًا. بمجرد إيقاف تشغيل التطبيق ، ينام الروبوت أيضًا.
توجد العديد من خوادم 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.