【SwiftPM】Swift에서도 Slack Bot을 만들고 싶다

이 기사는 모집 라이프 스타일 Advent Calendar 2016의 16 일째 기사입니다.

소개



핫 페퍼 뷰티에서 iOS 개발을 담당하는 @ 소토 자키입니다.
엔지니어의 커뮤니케이션 툴이라고 하면 Slack입니다만, iOS 엔지니어라도 평상시 쓰고 있는 언어(Swift)로 Slack Bot를 만들고 싶다!

그런 이유로 이번에는 iOS 엔지니어라면 모두 좋아하는 Swift로 Slack Bot을 만들어 보겠습니다!

환경





버전


Swift
3.0.1

Xcode
8.1


완성된 것




swift라는 발언에 대해 Bot이 GitHub URL을 대답합니다.

사전 준비



여기에서 Bot API Token을 받으세요.
htps : // my. scck. 코 m / 세 r ゔ 세 s / w / 보트





API Token은 다음과 같은 형식으로 제공됩니다.xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
여기서 Icon등의 설정도 해 두면 좋다고 생각합니다.

Slack Bot 만드는 법



이번에는 Swift로 작성된 Slack Client 용 라이브러리가 있으므로 이것을 사용합니다.
htps : // 기주 b. 코 m / pv 및 g / S ぁ c 도금 t

iOS 개발로 일반적인 라이브러리 관리의 CocoaPods, Carthage로 설치할 수 있습니다만,
이번은 모처럼이므로 Swift와 동시에 공개된 Swift Package Manageer (SwiftPM)를 사용해 보겠습니다.

프로젝트 설정



먼저 SwiftPM을 사용하여 프로젝트를 생성합니다.
$ mkdir SwiftBot
$ cd SwiftBot
$ swift package init --type executable
$ swift build
$ ./.build/debug/SwiftBot
Hello, world!

여기까지 Hello World가되어 있습니다. SwiftPM도 상당히 편리하네요!

SlackKit 추가



Package.swift를 편집하여 SlackKit을 추가합니다.

Package.swift
import PackageDescription

let package = Package(
    name: "SwiftBot",
    dependencies: [
        .Package(url: "https://github.com/pvzig/SlackKit.git", majorVersion: 3)
    ]
)


추가한 후 다시 빌드하여 라이브러리를 추가할 수 있습니다.
$ swift build

Xcode 프로젝트 만들기



iOS 개발에서 친숙한 Xcode로 편집하고 싶은 분은 Xcode 프로젝트도 생성합니다.
Xcode 프로젝트 생성도 SwiftPM에서 쉽게 할 수 있습니다!
$ swift package generate-xcodeproj

Swift Bot 구현



프로젝트를 열고 소스를 다음과 같이 편집합니다.
API Token을 Slack에서 얻은 것으로 바꾸십시오.

Sources/main.swift
import Foundation
import SlackKit

class SwiftBot: MessageEventsDelegate {
    let bot: SlackKit
    init(token: String) {
        bot = SlackKit(withAPIToken: token)
        bot.onClientInitalization = { (client: Client) in
            client.messageEventsDelegate = self
        }
    }

    func received(_ message: Message, client: Client) {
        guard let text = message.text, let channel = message.channel else { return }
        if text == "swift" {
            client.webAPI.sendMessage(channel,
                                      text: "https://github.com/apple/swift",
                                      asUser: true,
                                      success: nil,
                                      failure: nil)
        }
    }
    func sent(_ message: Message, client: Client) {}
    func changed(_ message: Message, client: Client) {}
    func deleted(_ message: Message?, client: Client) {}
}

print("SwiftBot is Running")
let bot = SwiftBot(token: "xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
RunLoop.main.run()

여기에서는 MessageEventsDelegate를 준수하는 SwiftBot 클래스를 정의합니다.
4개의 Delegate Method가 준비되어 있습니다만, received 메소드내에서 Slack의 발언을 감시해 응답하고 있습니다.
SlackKit은 다른 Delegate를 제공하므로 자세한 내용은 htps : // 기주 b. 이 m / pv와 g / S ぁ c 도금 t을 참조하십시오.

Bot 시작


XcodeのRun(Cmd + R)

또는
$ swift build
$ ./.build/debug/SwiftBot
SwiftBot is Running

로 시작할 수 있습니다.
지금까지 Slack에서 온라인 상태인지 확인하십시오.



Bot 응답



Slack의 적절한 채널에 Bot을 초대하고 "swift"라고 말하십시오.



제대로 작동하고 Bot가 swift의 GitHub 저장소 URL을 반환했습니다!

끝에



Swift에서 Slack Bot을 만드는 방법을 소개했습니다.
CI와 fastlane 등을 연계하면 재미 있군요!

좋은 웹페이지 즐겨찾기