正如iOS的昵称Telegram机器人在Swift上写道

这将是有关Telegrammer的,它是完全用Swift 4.1编写的Linux / macOS的Telegram Bot框架。



博览会:这样的想法是怎么想到的?


我的一个宠物项目(一个与Telegram相关的iOS应用程序,但是现在与他无关)需要内容管理器的Web界面来创建描述,标签等。 由于该应用程序已经在意识形态上与Telegram相连,因此我立即想到将内容直接发送到Messenger并已经执行了上述操作。


事实证明,您可以通过bot发送此类数据( bot如何在Telegram中排列)。


开始:我在寻找现成的解决方案,我找不到合适的解决方案。


然后所有星星连续排成一行,现在您将明白我的意思...


Java,Go,Python,PHP和其他许多可靠,经过验证的服务器端框架已经允许您毫无问题地创建机器人。 但是,这与我们无关(目击者 耶和华的 苹果),我们不是在寻找简单的方法。


如果您使用Swift编写机器人该怎么办?


最近(根据编程语言的标准), 服务器端Swift社区开始积极发展,出现了一些框架,例如Vapor,Perfect,Kitura,这些框架都赢得了足够的名声。


此外,苹果公司将柴火扔进了火炉,使用低级高性能的SwiftNIO框架使开发人员的工作更加轻松


为什么SwiftNIO很酷?

SwiftNIO是跨平台的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。


就像Netty一样,但是是为Swift编写的。


从根本上讲,SwiftNIO是用于在Swift中构建高性能网络应用程序的低级工具。 它特别针对那些使用“每个连接线程”并发模型效率低下或不可行的用例。 当构建使用大量相对较低利用率的连接的服务器(例如HTTP服务器)时,这是一个常见的限制。


为了实现其目标,SwiftNIO广泛使用“非阻塞I / O”:因此得名! 非阻塞I / O与更常见的阻塞I / O模型不同,因为应用程序不等待数据发送到网络或从网络接收数据:相反,SwiftNIO要求内核在I / O操作可以时通知它。无需等待即可执行。


SwiftNIO并不旨在提供高级解决方案,例如Web框架。 相反,SwiftNIO专注于为这些高级应用程序提供低级构建块。 在构建Web应用程序时,大多数用户都不想直接使用SwiftNIO:相反,他们将要使用Swift生态系统中可用的许多出色的Web框架之一。 但是,这些Web框架可能选择在幕后使用SwiftNIO来提供其网络支持。


我从完成的Telegram Bot Swift库中考虑了什么:


  1. zmeyc / telegram-bot-swift-一个相当高级的库,整个Telegram Bot API都是从站点解析的,方法和模型,高级路由都可以在macOS和Linux上运行。
    缺点是它是很久以前编写的,当时,所有的Apple框架(尤其是Foundation)都在Linux上非常不稳定:


    • 通过curl发送请求
    • 在研究时,库本身和从属库都未移植到Swift 4
    • webhooks不支持
    • 长时间未更新的存储库,因此,不支持更新的Telegram Bot API的某些功能。

  2. FabrizioBrancati / SwiftyBot-原谅我,我不明白为什么这个机器人拥有最多的明星,过时的Vapor 2.4.0处于引擎盖之下,还有孤独的main.swift,它只是展示了该机器人最简单的工作。 没有模型,助手,调度队列,什么都没有。 哦,不! 与竞争对手不同,它支持WebHooks。


  3. ShaneQi / ZEGBot-一个非常简单的实现,实现了基本方法,模型,并且仅实现了LongPolling。



因此,我们决定,我们将编写自己的框架。 老实说, 安德烈·费德里亚Andrey Fidrya)的机器人启发了我,但我决定可以做得更好。


Climax:欢迎来到后端世界。 SwiftNIO,感谢您的大脑爆炸。


我承认,在iOS应用程序之后,为Server Side编写应用程序是非常困难的,我必须换个思路。


在编写框架时,Vapor的人员已经宣布了beta版,并且已经基于SwiftNIO。 Vapor具有模块化架构,每一层都位于其自己的存储库中,这非常方便,您只能使用部分实现。


我决定使用:



在此过程中,在Vapor HTTPClient中发现了一些错误,已成功修复,改进了HTTPServer,可直接使用https,而无需使用nginx等。


发生了什么:


  • 机器人API的设计着眼于该领域的受信任玩家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开发人员以及更多人,请使用它!


该框架处于beta版本,任何人都可以根据需要使用它。


经过一个月的测试和改进,存在一些缺陷,愿望清单和许多增强问题,但是,“拼写检查”在Ubuntu上已经运转了很长时间。


我将不胜感激,感谢您的反馈。

Source: https://habr.com/ru/post/zh-CN416023/


All Articles