【免费下载链接】SlackKit
Build Slack apps, in Swift
SlackKit是一个用Swift编写的开源开发库,帮你以最少代码构建Slack 机器人和应用:实时监听消息事件、调用 Slack Web API、处理斜杠命令、OAuth 授权和消息按钮交互。它由 5 个职责清晰的模块组成——SKCore、SKWebAPI、SKRTMAPI、SKClient、SKServer,本文带你一次看懂每个模块是干什么的、怎么用。
SlackKit 是什么?适合谁用?
SlackKit 的定位可以概括为一句话:Build Slack apps, in Swift(用 Swift 构建 Slack 应用)。它把开发一个 Slack 机器人所需的常见能力封装成几个易用的框架:
| 能力 | 说明 | 对应模块 |
|---|---|---|
| 📡 实时连接 | 通过 WebSocket 接入 Slack RTM API,实时收发消息事件 | SKRTMAPI |
| 🌐 API 调用 | 封装 50+ 个 Slack Web API 接口(频道、消息、文件、表情等) | SKWebAPI |
| 🧩 数据模型 | User、Channel、Message 等共享模型对象 | SKCore |
| 🖥 应用服务器 | 启动 HTTP 服务处理斜杠命令、OAuth、消息按钮 | SKServer |
| 🤖 客户端扩展 | 继承Client定制自己的事件处理逻辑 | SKClient |
支持 macOS、iOS、tvOS 及 Linux,安装方式兼容 Swift Package Manager、Carthage 和 CocoaPods。
⚠️ 注意:官方 README 声明该项目已不再处于积极开发状态(no longer under active development),适合学习与维护既有项目,新项目选型时请结合自身需求评估。
快速安装:SlackKit 三种接入方式
方式一:Swift Package Manager(推荐)
在 Package.swift 中声明依赖即可:
let package = Package( dependencies: [ .package(url: "https://github.com/pvzig/SlackKit.git", .upToNextMinor(from: "4.6.0")) ] )如果想在本地克隆仓库阅读源码:
git clone https://gitcode.com/gh_mirrors/sl/SlackKit.git方式二:Carthage
在 Cartfile 中写入github "pvzig/SlackKit",然后运行:
carthage bootstrap --use-xcframeworks --platform macos方式三:CocoaPods
在 Podfile 中加入pod 'SlackKit',需要某个子模块时可用pod 'SlackKit/SKWebAPI'这样的语法只引入所需部分。
3 分钟上手:Slack 机器人最小示例
导入后只需几行代码就能跑起一个 RTM 机器人:
import SlackKit let bot = SlackKit() bot.addRTMBotWithAPIToken("xoxb-SLACK-BOT-TOKEN") // 注册消息事件回调 bot.notificationForEvent(.message) { (event, _) in print(event.message) }更多起步方式见 README.md:
- OAuth 模式:用应用的
Client ID和Client Secret创建开箱即用的 Slack App; - 纯 Web API 模式:只需 Token 就能直接调用 Slack 接口;
- 斜杠命令 / 消息按钮 / OAuth 授权:都可以通过
SKServer的路由中间件实现。
5 大模块逐个拆解:SlackKit 源码结构详解
1️⃣ SKCore —— 共享数据模型层
SKCore 是其他所有模块的"公共字典",定义了 Slack 世界里的核心对象:User.swift、Channel.swift、Message.swift、File.swift、Team.swift 等。
其中 Event.swift 里的EventType枚举定义了 70 多种可监听事件(message、channel_joined、reaction_added、file_created……),是事件驱动开发的基石。
2️⃣ SKWebAPI —— Slack Web API 调用封装
WebAPI.swift 用 Token 初始化后即可发起请求,覆盖chat.postMessage、channels.list、users.list、reactions.add等 50 多个接口(完整清单见 SKWebAPI/README.md):
let webAPI = WebAPI(token: "xoxp-SLACK_AUTH_TOKEN") webAPI.authenticationTest(success: { user, team in print("\(user) - \(team)") }, failure: nil)底层由 Endpoint.swift 和 NetworkInterface.swift 完成请求路由与网络传输。
3️⃣ SKRTMAPI —— 实时消息通道(RTM)
SKRTMAPI.swift 负责连接 Slack 的 Real Time Messaging API:
let rtm = SKRTMAPI(withAPIToken: "xoxb-SLACK_AUTH_TOKEN") rtm.connect()它通过RTMWebSocket协议保持平台无关性:Apple 平台默认使用 Starscream(StarscreamRTM.swift),Linux 使用 Vapor 的 WebSocketKit(VaporEngineRTM.swift)。连接参数可用 RTMOptions.swift 定制(心跳间隔、超时、自动重连等)。
4️⃣ SKClient —— 可定制的客户端
Client.swift 是一个open class,内部自动维护 channels、users、files 等状态缓存。子类只需覆写notificationForEvent(_:type:)和initialSetup(JSON:)两个方法,就能把自定义客户端传给addRTMBotWithAPIToken(_:client:),实现完全属于自己的事件处理逻辑。
5️⃣ SKServer —— 内建 HTTP 服务器
SKServer.swift 让你一键启动 HTTP 服务,处理 Slack 回调。它的亮点是自带一套轻量 Web 框架Titan(SKServer/Sources/Titan/),包含路由、CORS、JSON 解析、健康检查等组件,无需额外引入 Web 框架。核心概念三件套:
Middleware:处理请求并产生响应RequestRoute:把中间件绑定到 URL 路径SlackKitResponder:汇总所有路由交给服务器
对应源码:ResponseMiddleware.swift、RequestRoute.swift、SlackKitResponder.swift、OAuthMiddleware.swift。
三大实战场景:SlackKit 能做出什么
⚡ 场景一:斜杠命令(Slash Commands)
在 Slack 中配置好/hello命令后,为它创建路由和响应中间件:
let middleware = ResponseMiddleware(token: "SLASH_COMMAND_TOKEN", response: SKResponse(text: "👋")) let route = RequestRoute(path: "/hello", middleware: middleware) let responder = SlackKitResponder(routes: [route]) slackkit.addServer(responder: responder)用户输入/hello时,Slack 会把请求打到/hello路由,返回你指定的回复。
🎯 场景二:消息按钮交互(Message Buttons)
发送带按钮的消息,只需把Action挂到Attachment上:
let helloAction = Action(name: "hello", text: "🌎") let attachment = Attachment(fallback: "Hello World", title: "Welcome to SlackKit", callbackID: "hello_world", actions: [helloAction])用户点击按钮后的回调,则通过MessageActionMiddleware+MessageActionRoute处理(源码见 MessageActionMiddleware.swift)。
🔐 场景三:OAuth 授权一键接入
传入Client ID与Client Secret,SlackKit 会自动注册/oauth回调路由,并把换到的 User Token 和 Bot Token 分别注入 Web API 与 RTM 连接(实现见 SlackKit.swift):
let oauthConfig = OAuthConfig(clientID: "CLIENT_ID", clientSecret: "CLIENT_SECRET") bot.addServer(oauth: oauthConfig)本地调试 OAuth、斜杠命令时,建议用 ngrok 之类的工具提供 HTTPS 隧道。
看示例学 SlacKit:官方 Examples 项目
仓库自带两个完整示例应用,是理解最佳实践的活教材:
- Leaderboard(Leaderbot):一个频道积分榜机器人,支持
++/--计分命令,演示了 Token 模式与 OAuth 模式两种初始化方式。源码:Examples/Leaderboard/Leaderboard/Sources/Leaderbot.swift - Robot or Not Bot:经典的"它是机器人吗?"问答机器人,监听
message事件并从内置词典给出判定。源码:Examples/Robot or Not Bot/Robot Or Not Bot/Sources/main.swift
每个示例都提供了 SPM(Package.swift)、CocoaPods、Carthage 三种依赖配置,可以直接打开运行。
项目结构与测试资源速查
| 路径 | 内容 |
|---|---|
| SlackKit/Sources/ | 伞模块入口,导出全部子模块 |
| SKCore/Sources/ | 共享模型(User、Message、Event 等) |
| SKWebAPI/Sources/ | Web API 请求封装 |
| SKRTMAPI/Sources/ | RTM 实时连接(含 WebSocket 适配层) |
| SKServer/Sources/ | HTTP 服务器、中间件与 Titan 框架 |
| SKClient/Sources/ | 可扩展的 Client 基类 |
| Examples/ | Leaderboard、Robot or Not Bot 示例 |
| SlackKitTests/Resources/ | 20+ 份 Slack 响应 JSON 测试样本(rtm.connect.json、events.json 等) |
总结:如何选择 SlackKit?
📌一句话总结:SlackKit 是 Swift 生态里少见的"全栈式" Slack 开发库——一个 Token 即可接入实时事件流,几行代码就能部署支持 OAuth、斜杠命令和消息按钮的完整 Slack 应用。
- 想快速做出 Slack 机器人:直接用顶层
SlackKit类 + SKWebAPI/SKRTMAPI; - 想只调用 Slack 接口:单独引入 SKWebAPI 即可;
- 想深度定制连接或事件逻辑:组合 SKRTMAPI + SKClient 的扩展点。
虽然项目已进入维护状态,但它的模块化设计(模型层 / API 层 / 实时层 / 服务层 / 客户端层)依然是学习 Slack 应用架构的优秀范本,值得每个 Swift 开发者通读一遍。
【免费下载链接】SlackKit
Build Slack apps, in Swift
相关推荐
Swinject容器层次结构:构建模块化应用的终极指南
Swinject容器层次结构:构建模块化应用的终极指南 Swinject容器层次结构是Swift依赖注入框架中的一项强大功能,能够帮助开发者构建高度模块化的应用
开发工具react-ionize元素速查清单:React 构建 Electron 应用,<app>、<window>、<menu> 三大核心元素一次看懂
react ionize元素速查清单:React 构建 Electron 应用,<app 、<window 、<menu 三大核心元素一次看懂 一、react
用 SlackKit 打造 Slack Slash 命令:从配置到 Middleware 的完整教程
用 SlackKit 打造 Slack Slash 命令:从配置到 Middleware 的完整教程 想在 Slack 里输入 /hello 就得到机器人回复吗
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考