Swift에는 코드 검토를 위한 팀의 Slack Bot 이야기가 설치되어 있습니다.🚢
13942 단어 ServerSideSwiftSwiftVaporiOS
Giithub에서 팀에게 코드 검사를 요청한 Slack Bot이 Swift에 설치된 이야기🚢
서버측 Swift의 대표적인 프레임워크 Vappor를 사용하여 팀이 개발한 인프라에서 Pull Request를 게시할 때 같은 팀에 있는 누군가에게 무작위로 의견을 제출하는 Slack Bot을 구현합니다!
장인처럼 세련되게 하고 싶어서 Giithub Shokunin이라고 지었어요.👍
GithubShokunin 1.0.0-beta.1 완성🎉 https://t.co/TSrent6A3u — yuzushioh (@yuzushioh) December 24, 2016
현재 상황을 실현할 수 있는 GiithubShokunin.
지금 GiithubShokunin은 다음 하나만 할 수 있어요.😇
@Bot review #PR Number
이런 느낌!GiithubShokunin 설치
Vapor의 설치 방법은 ReadMe에 요약되어 있습니다!
bot-config.json
{
"token": "xoxo-2h4j43n5g3i2mn24g",
"bot_name": "GithubShokunin"
}
※ 리뷰를 보고 중인 팀을 만들어야 합니다!
{
"owner_name": "yuzushioh",
"repo_name": "GithubShokunin",
"review_team_id": "12345",
"github_token": "biub3h24vb53vjjv2v42v24g(sample)"
}
Vapor 정보
Vapor
ReadMe 설치
다음 코드는 Hello World!실현할 수 있다!
let drop = Droplet()
drop.get("/") { request in
return "Hello World!"
}
drop.run()
GiithubShokunin 설치
허봇을 사용할 수 없기 때문에 슬랙의 Real Time Messageing API를 사용하여 채트를 모니터링하고 있습니다.
Vaper의 WebSocket
다음과 같은 WebSocket Client를 만들 수 있습니다.
import Engine
import WebSockets
try WebSocket.connect(to: url) { ws in
print("Connected to \(url)")
ws.onText = { ws, text in
print("[event] - \(text)")
}
ws.onClose = { ws, _, _, _ in
print("\n[CLOSED]\n")
}
}
구성원 사용자가 bot-config.json
지정된 Bot이면 채팅 내용에 따라 처리됩니다.채팅 내용에 따라 연락처 만들기
현황은 채팅의 내용을 바탕으로 다음과 같은 3개 부분으로 나뉜다.
enum MessageContent {
case requestReview(prNumber: String)
case commandLine
case unknown
}
Content에 따라 필요한 API 두드리기
VaperDroplet를 사용하여 Giithub의 API 두드리기
let response = try drop.client.get("http://github.com", query: ["q": "test"])
Response의 JSON을 Model에 매핑합니다.guard let json = response.json else {
throw BotError.invalidResponse
}
let pullRequest = try PullRequest(node: json.node)
제작된 모델별로 Bot의 응답 작성
struct SlackMessage {
let id: UInt32
let channel: String
let text: String
let type: String
init(to channel: String, text: String) {
self.id = UInt32.random()
self.channel = channel
self.text = text
self.type = "message"
}
}
이 모형은 VaporNodeConvertible
에 부합되고 모형으로 노드를 제작할 수 있습니다!extension SlackMessage: NodeConvertible {
func makeNode(context: Context) throws -> Node {
return try Node(node: [
"id": id,
"channel": channel,
"type": "message",
"text": text]
)
}
init(node: Node, in context: Context) throws {
id = UInt32.random()
channel = try node.extract("channel")
text = try node.extract("text")
type = try node.extract("type")
}
}
제작된 슬랙 메시지를 멤버가 있는 슬랙 채널로 돌려보냅니다!!try WebSocket.connect(to: url) { ws in
print("Connected to \(url)")
ws.onText = { ws, text in
......
let response = SlackMessage(to: message.channel, text: responseText)
try socket.send(response)
}
ws.onClose = { ws, _, _, _ in
print("\n[CLOSED]\n")
}
}
생각
Reference
이 문제에 관하여(Swift에는 코드 검토를 위한 팀의 Slack Bot 이야기가 설치되어 있습니다.🚢), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuzushioh/items/7ff54a9a8b50f65f83e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)