a2chub / slack2githubIssue

SlackBot for GithubAPI create new Issue by GoogleAppsScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

元ドキュメント

GASで作るSlack bot for github SlackからGithub Issue新規作成するよ。GASで!

シチュエーション

Slackでプロジェクトの相談とかしてる時に、アレやろうコレやろうとか うぉ、Bug踏んだ!とか、日常茶飯事ですよね。

そんな会話してたくせに全然Issueを起こしてなくて、さっきなんか重要なタスク話してたよね?なんだっけ?凄い大切だった気がする!!みたいな感じ有りますよね。 そこから、ログをあさったりするわけですよ。んで見つけられないんですよ大抵の場合。

マメな人なら、その瞬間にIssue作るんだろうけど、マメな人なんて存在しないから Issueが無いままドッカーンってナルわけですよ。ならないか?

Slack から投稿すればいいやん

Slack(slash cmd) > GAS > githubAPI ということですね。

作業は3ステップ

Step1

githubからパーソナルアクセストークンゲットする。 >本来であればちゃんとOAuthでやるべき

Step2

GASファイルを作成して、Webサービスを起動する。

Step3

SlackにSlash Commandを登録する。

Step1 パーソナルアクセストークン持ってくる

Personal access tokens ページ ここから、げねれーとしてくだしい

Step2 GAS ファイルこさえる

新規スクリプトファイル作って下のコードコピペして config書き換える。

// config
var ACC_TOKEN = "<Your Personal access tokens>";
var OWNER = "<ORGANISATION>";
var REPO = "<REPOSITORY>";


function sendHttpPost(issue_data) {  
  var raw_payload = {
    "title": issue_data.title, 
    "body" : issue_data.body +"\n\nwritten by "+ issue_data.owner
  }

  var payload = JSON.stringify(raw_payload);
      
  var options =
      {
        "method" : "POST",
        "payload" : payload
      };
  
  var x = UrlFetchApp.fetch("https://api.github.com/repos/"+OWNER+"/"+REPO+"/issues?access_token="+ACC_TOKEN, options);
  return '{"thank you"}'
}


function makeResponse(e, type){
  var s  = JSON.stringify({type: type, params: e});
  Logger.log(s);
  
  var ret = e.parameter.text.split(" ")
  var ret_hash = {
    "title": ret[0],
    "body":  ret[1],
    "owner": e.parameter.user_name
  }
                  
  return ret_hash
}

function doGet(e) {
  return sendHttpPost( makeResponse(e, "GET") );
}
function doPost(e) {
  return sendHttpPost( makeResponse(e,"POST") );
}

Webアプリケーションとして導入する。

SlackBot_github_newIssue.png

リビジョン打って、Webアプリとして公開する。 自分で実行で、全員(匿名ユーザーを含む)の設定にする。

SlackBot_github_newIssue.png

投稿者が固定されてしまう問題

上記スクリプトは、自分のアクセストークン仕込んでるせいで、Issueのオーナーが全件自分になってしまう。だれが投稿できたかがわかればいいので、本文の末尾に、Slackから取得できるUserNameを追記するようにした。

Step3 SlackにSlashコマンドを仕込む

https://<YOUR_SLACK_TEAM>.slack.com/services/new/slash-commands

にアクセスし、新規コマンドを追加する。

Slashコマンドの設定項目は6箇所

  • Command
    • /.newissue
  • URL
    • 前ステップでコピーしたURL (*1)
  • Method
    • GET (POSTでもどっちでもいいはず)
  • Token
    • 今回使用していない。特にいじらず
  • Autocomplete help text
    • Description
      • githubに新規イシューを作成します
    • Usage hint
      • [title] [body]
  • Desciptice Label
    • (特に何も書いてない)

完成

以上で、Slackのどのチャンネルでも、/.と入力すれば コマンドがサジェッションされ/.newissueにタイトルと本文を入れれば イシューが作成されますよっと。

Slack.png

補完が出るのでそのまま入力しちゃう

Slack.png

さらに、Slackのgithubインテグレーションを繋いでおくと投稿されたIssueがそのままSlackのチームに通知されます。

Slack.png

いい感じ!

オプションパーサー募集 github

引数で、リポジトリやマイルストン、アサイニーを設定したい。 必須フィールドにするのは、気軽にIssue作成のポリシーに反するので実装してない。 (>パーサー書くのがめんどくさくてやってない)

例えばSlack上でつぶやくときの標準パターンとして

$ /.newissue [タイトル] [本文]

とするんだけども、明らかにオプションが指定できるときには、

-r リポジトリー名
-m マイルストン名
-l ラベル名(複数可能)
-a アサイニー

等オプション指定が出来るようになるとよりIssueカオスが和らぎそう。

こんな感じにできたらなぁ・・😳

$ /.newissue -r myrepo2 -m 高速化 -l ログイン -a a2chub ログイン画面の画像をSVG化する ログインページの表示が重いので可能な限り早くする、取り急ぎ画像ファイルをSVGに置き換える

ミタイナ感じにできるといいなぁと・・・ .gsファイルをgithubに上げてありますので、cmdパーサのprお待ちしておりますm(_ _)m

Happy Slacking!!

About

SlackBot for GithubAPI create new Issue by GoogleAppsScript

License:MIT License


Languages

Language:JavaScript 100.0%