سيكون حول Telegrammer ، إطار Telegram Bot لنظام Linux / macOS ، مكتوبًا بالكامل في Swift 4.1

معرض: كيف يتبادر إلى الذهن مثل هذه الفكرة؟
يحتاج أحد مشروعي للحيوانات الأليفة (تطبيق iOS يتعلق ببرنامج Telegram ، ولكن الأمر لا يتعلق به الآن) إلى واجهة ويب لمدير المحتوى لإنشاء وصف وعلامة والمزيد. نظرًا لأن التطبيق كان مرتبطًا إيديولوجيًا ببرنامج Telegram ، فقد فكرت على الفور في إرسال محتوى مباشرة إلى برنامج المراسلة وهناك بالفعل تنفيذ الإجراءات المذكورة أعلاه.
اتضح أنه يمكنك إرسال هذه البيانات من خلال برامج الروبوت (كيف يتم ترتيب برامج التتبُّع في Telegram ).
Outset: كنت أبحث عن حل جاهز ، لم أجد حلًا مناسبًا.
وبعد ذلك تصطف كل النجوم على التوالي ، الآن ستفهم ما أعنيه ...
هناك العديد من أطر العمل الموثوقة والمثبتة من جانب الخادم في Java و Go و Python و PHP وغيرها والتي تسمح لك بالفعل بإنشاء روبوت دون أي مشاكل. لكن هذا ليس عنا (شهود يهوه Apple) ، نحن لا نبحث عن طرق سهلة.
ماذا لو كتبت روبوت في Swift؟
في الآونة الأخيرة (وفقًا لمعايير لغات البرمجة) ، بدأ مجتمع Server Side Swift في التطور بنشاط ، وظهرت العديد من الأطر ، مثل Vapor ، Perfect ، Kitura ، والتي تمكنت من الحصول على شهرة كافية.
بالإضافة إلى ذلك ، قامت شركة Apple بإلقاء الحطب في الفرن ، مما يجعل الحياة أسهل للمطورين مع إطار SwiftNIO منخفض المستوى وعالي الأداء
لماذا يعد SwiftNIO رائعًا؟SwiftNIO عبارة عن إطار تطبيق شبكة غير متزامن يستند إلى الأحداث عبر النظام الأساسي للتطوير السريع لخوادم وعملاء البروتوكولات عالية الأداء التي يمكن صيانتها.
إنه مثل Netty ، لكنه كتب لـ Swift.
يعد SwiftNIO أداة منخفضة المستوى بشكل أساسي لإنشاء تطبيقات شبكات عالية الأداء في Swift. ويستهدف بشكل خاص حالات الاستخدام تلك التي يكون فيها استخدام نموذج التزامن "خيط لكل اتصال" غير فعال أو لا يمكن الدفاع عنه. يعد هذا قيدًا شائعًا عند إنشاء خوادم تستخدم عددًا كبيرًا من الاتصالات منخفضة الاستخدام نسبيًا ، مثل خوادم HTTP.
لتحقيق أهدافها ، يستخدم SwiftNIO على نطاق واسع "الإدخال / الإخراج غير المحجوب": ومن هنا جاء الاسم! يختلف الإدخال / الإخراج غير المحظور عن نموذج الإدخال / الإخراج الأكثر حظرًا لأن التطبيق لا ينتظر إرسال البيانات أو استلامها من الشبكة: بدلاً من ذلك ، يطلب SwiftNIO من kernel إبلاغه عندما يمكن لعمليات الإدخال / الإخراج أن يتم دون انتظار.
لا يهدف SwiftNIO إلى توفير حلول عالية المستوى مثل أطر الويب. بدلاً من ذلك ، يركز SwiftNIO على توفير كتل البناء ذات المستوى المنخفض لهذه التطبيقات ذات المستوى الأعلى. عندما يتعلق الأمر بإنشاء تطبيق ويب ، فلن يرغب معظم المستخدمين في استخدام SwiftNIO مباشرة: بدلاً من ذلك ، سيرغبون في استخدام أحد إطارات الويب الرائعة العديدة المتاحة في نظام Swift البيئي. ومع ذلك ، قد تختار أطر الويب هذه استخدام SwiftNIO تحت الأغطية لتقديم دعمها للشبكات.
ما اعتبرته من مكتبات Telegram Bot Swift النهائية:
zmeyc / telegram-bot-swift - مكتبة متقدمة إلى حد ما ، يتم تحليل Telegram Bot API بالكامل من الموقع ، كل من الأساليب والنماذج ، التوجيه المتقدم ، يعمل على كل من macOS و Linux.
العيوب المرتبطة بحقيقة أنه كتب منذ وقت طويل ، وفي ذلك الوقت ، كانت جميع أطر عمل Apple (خاصة المؤسسة) تعمل على Linux غير مستقرة للغاية:
- يرسل الطلبات عبر حليقة
- في وقت الدراسة ، لم يتم نقل كل من المكتبة نفسها والمكتبات التابعة بسرعة 4
- غير مدعوم من webhooks
- مستودع لم يتم تحديثه لفترة طويلة ، ونتيجة لذلك ، لا يتم دعم بعض ميزات واجهة برمجة تطبيقات Telegram Bot المحدثة.
FabrizioBrancati / SwiftyBot - سامحني ، لا أفهم لماذا يحتوي هذا البوت على أكبر عدد من النجوم ، و Vapor 2.4.0 القديم تحت غطاء المحرك ، و main.swift الوحيد الذي يوضح ببساطة أبسط عمل مع الروبوت. لا نماذج ، مساعدين ، إرسال قوائم الانتظار ، لا شيء. أوه لا! على عكس المنافسين ، فإنه يدعم WebHooks.
ShaneQi / ZEGBot - تنفيذ بسيط للغاية ، والطرق الأساسية ، والنماذج ، ومرة أخرى يتم تنفيذ LongPolling فقط.
لذا ، تقرر ، سنكتب إطار عملنا. بصراحة ، ألهمني Andrey Fidrya بروبوته ، لكنني قررت أنه يمكنني محاولة القيام بعمل أفضل.
الذروة: مرحبًا بكم في عالم الخلفية. SwiftNIO ، شكرا للدماغ المنفجر.
أعترف ، بعد تطبيقات iOS ، أن كتابة طلب لـ Server Side أمر صعب للغاية ، يجب أن أفكر بشكل مختلف.
بحلول الوقت الذي تم فيه كتابة الإطار ، كان الرجال من فابور قد أعلنوا عن إصدار بيتا وكانوا بالفعل يعتمدون على SwiftNIO. يحتوي Vapour على بنية معيارية ، تعيش كل طبقة في مستودعها الخاص بها ، وهو مريح للغاية ، يمكنك استخدام جزء فقط من التطبيقات.
قررت استخدام:
في هذه العملية ، تم العثور على بعض الأخطاء في Vapor HTTPClient ، تم إصلاحها بنجاح ، تم تحسين HTTPServer ، للعمل مع https خارج الصندوق ، دون الحاجة إلى استخدام nginx وما شابه.
ماذا حدث:
- تم تصميم واجهة برمجة تطبيقات الروبوت مع التركيز على لاعب موثوق به في هذه المنطقة python-telegram-bot
- مثل zmeyc / telegram-bot-swift ، يمكن إنشاء جميع نماذج وأساليب Telegram Bot API عن طريق تشغيل برنامج نصي.
- تم تنفيذ وضعي Longpolling و WebHooks
- المعالجات المنفذة: CommandHandler ، CallbackQueryHandler ، RegexpHandler ، MessageHandler
- العديد من المرشحات للتحديثات
- روبوتان بسيطان ، كمثال ، معيار EchoBot و HelloBot
التبادل: نكتب روبوت مفيد بشكل عام ، دعه يتحقق من الإملاء.
الروبوت : yandex_spell_checker_bot
كود المصدر: https://github.com/givip/YandexSpellCheckerBot
يبدو main.swift هذا:
import Foundation import Telegrammer /// enviroment variable ( , ) guard let token = Enviroment.get("SPELL_CHECKER_BOT_TOKEN") else { exit(1) } do { /// let bot = try Bot(token: token) /// let dispatcher = Dispatcher(bot: bot) /// let controller = SpellCheckerController(bot: bot) /// /start, let commandHandler = CommandHandler(commands: ["/start"], callback: controller.start) dispatcher.add(handler: commandHandler) /// , let textHandler = MessageHandler(filters: .private, callback: controller.spellCheck) dispatcher.add(handler: textHandler) /// , . let inlineHandler = CallbackQueryHandler(pattern: "\\w+", callback: controller.inline) dispatcher.add(handler: inlineHandler) /// Longpolling _ = try Updater(bot: bot, dispatcher: dispatcher).startLongpolling().wait() } catch { print(error.localizedDescription) }
الخاتمة: مطورو iOS والمزيد ، استخدمها!
إطار العمل في مرحلة تجريبية ، ويمكن لأي شخص استخدامه لاحتياجاتهم.
بعد شهر من الاختبار والتحسينات ، كانت هناك بعض العيوب وقائمة الرغبات والكثير من مشكلات التحسين ، ولكن مع ذلك ، فإن "التدقيق الإملائي" كان يدور على أوبونتو لفترة طويلة.
سأكون ممتنا لأية ملاحظات ، ورمي المروحة.