커밋 수 순위를 발표하는 봇을 만들었습니다.

9653 단어 슬랙GitHubHubot

경위



이번 사내에서 Slack을 사용하고 있어, 무료 플랜이라면 10000건의 메시지까지 밖에 남길 수 없어, 요전날 드디어 상한에 도달해 버렸습니다. 거기서 위의 사람에게 유료 플랜을 부탁해 과금해 주었으므로, 유효 이용하지 않으면 죄송하다고 하는 것으로 봇을 만들기 시작했습니다.

대부분의 엔지니어의 사람들은 레거시 PHP와 jQuery 밖에 괴롭힌 적이 없기 때문에,이 봇 개발을 통해 사내 엔지니어의 사람에게 조금이라도 새로운 것을 만져 주길 바란다는 것도 목표입니다.

제1탄으로서 동기 부여에 연결될 것 같은 리포지토리명을 입력하면 1주간의 커밋수를 랭킹 표시하는 봇을 만들었습니다.

코드



commend.coffee
token = 'your token'
apiUrl = "https://api.github.com/repos/Organization名"

module.exports = (robot) ->
  robot.respond(/commend (.*)/i, (msg) ->
    repository = msg.match[1]

    oneWeekAgo = new Date()
    oneWeekAgo.setDate(oneWeekAgo.getDate() - 7)
    year = oneWeekAgo.getFullYear()
    month = ("0" + (oneWeekAgo.getMonth() + 1)).substr(-2)
    day = ("0" + oneWeekAgo.getDate()).substr(-2)

    since = "#{year}-#{month}-#{day}T00:00:00Z"

    request = robot.http("#{apiUrl}/#{repository}/commits")
      .query(since: since)
      .query(access_token: token)
      .get()

    committers = {}
    request((err, res, body) ->
      if err
        msg.send("何かエラーになっちゃいました...")
        return

      commits = JSON.parse body

      if commits.message == "Not Found"
        msg.send("#{repository}が見つかりませんでした...")
        return

      for commit, index in commits
        committer = commit.committer.login
        if committers[committer] == undefined
          committers[committer] = 0
        ++committers[committer]

      respond = "発表します!\n\n#{since}から今までで\n\n"
      commended = []
      for i in [0..Object.keys(committers).length - 1]
        max = 0
        nextCommitter = ''
        for committer, count of committers
          if (commended.indexOf(committer) == -1)
            if count >= max
              nextCommitter = committer
              max = count
        commended.push(nextCommitter)
        respond += "#{i + 1}位: #{nextCommitter} #{max} commits\n"

      msg.send(respond)
    )
  )

평소 JavaScript를 전혀 그리지 않기 때문에 보다 효율적으로 정렬하는 방법이 있다고 생각합니다만, 여기에서는 버블 소트를 써 버렸습니다 웃음. githubot이라는 것이있는 것 같습니다만, 본 느낌 거기까지 편리하게 된 느낌이 없었기 때문에 보통 API를 호출하고 있습니다.

수행한 느낌





이것으로 뭔가 동기 부여가 오르는 것 같네요! 웃음

좋은 웹페이지 즐겨찾기