Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

a2chub/slack2githubIssue

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
4 Commits
 
 
 
 
 
 

Repository files navigation

元ドキュメント

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.