Giter Club home page Giter Club logo

omoitsukibot's People

Contributors

attache-case avatar azoson avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

azoson

omoitsukibot's Issues

threadにbotが反応して自動でGitHubのIssueにコメント投稿するようにする

Issue #3 のようにおもいつきへのコメントのフォーマットを定めてしまってもよいのですが、Slack上での操作としては、おもいつきの投稿に直接threadするのが単純なので、これにbotが反応するようにできると嬉しいと思います。

threadに対応する方法の構想

今動かしているbotプログラムの本体を作っているリポジトリ
scrapinghub/slackbot#136
によると、thread関連のAPIへの対応が議論されており、今週末に実装してみるよという話になっている

上記案件が実装されたなら、後はbotがthread固有のIDとLightBulbのIssue番号を対応付けて覚えるようにすれば、threadへの投稿に反応してIssueに自動でコメント投稿できるようになると思う。(思い付き投稿(Issue生成)と同時にbotが自動でstart_threadし、thread固有のIDを把握するのがよさそう。出来るかは不明。)

チャンネル上の通常の投稿のmessageではスレッドを特定するIDである'thread_ts'キーが存在しない。つまりmessage.body['thread_ts']がNone。スレがついて初めての投稿のmessageから共通の'thread_ts'の値が使用されるようになっている。スレが付いた元の投稿とスレをどうやって結び付けているかは不明。

GitHubへの投稿にPyGithub関係のモジュールを使う場合は、requirements.txtに追加を忘れずに。

"#[イシュー番号] [コメント]"でイシューのコメントに追記できるようにする

オーソドックスで実装しやすい機能だと思います。

GitHubへの投稿方法について実装方法は2つくらいありそうです

  • GitHubのREST APIを使う
    • どういうクエリでコメント追加できるか調べる
    • GitHubのomoitsukibotアカウント(PWは聞いてください)で、リポジトリ・organaizationへのwrite権限を含むpersonal access tokenを取得する
    • herokuのomoitsukibotアプリのConfig Variables画面でpersonal access tokenを環境変数として登録する
  • GitHubのGraphQL APIを使う
    • queryで対象のリポジトリ・Issueを明らかにし、mutationでコメント追加などの操作をするJSON形式の「query」をPOSTすることで実現可能。REST APIと同様、personal access tokenも必要。

LightBulbリポジトリに行かないとイシュー番号が何番だったか分からなくなりそうですし、omoitsukiチャンネルの過去の投稿を遡るのも大変なので、何かしら支援したほうが良さそう。

GitHubへの投稿にPyGithub関係のモジュールを使う場合は、requirements.txtに追加を忘れずに。

GitHubに投稿するアカウントのログイン情報を書かなくてよいようにする

https://github.com/attache-case/omoitsukibot/blob/master/plugins/Github_func.py#L7-L10
にあるように、環境変数でとはいえGitHubに(代理)投稿するアカウントのログイン情報を書くようになっているので、これをGitHubのPersonal Access Tokenで代替できないか。

その場合、環境変数として

GITHUB_TOKEN = {{your personal access token}}

を登録したうえで、

Github_func.pyのグローバル部分に次の行を追加

TOKEN = os.environ.get('GITHUB_TOKEN')

同ファイルのGitHub認証部分
https://github.com/attache-case/omoitsukibot/blob/master/plugins/Github_func.py#L22
について

session.auth = (TOKEN) # TOKENを使った認証にする。この書き方で良いかは不明。

のような変更をすれば良さそう

CONTRIBUTION.mdの作成

必要か分からないけれど・・・
コードはこういう風に書いた方が良い!という意見があれば作っていただきたい

ひとつの投稿に対してbotが複数回反応してしまう場合がある

my_mention.pyにて、文頭の「おもいつき」に相当する何パターンかの文字列にbotが反応するように

@listen_to(r'^【おもいつき】.')
@listen_to(r'^おもいつき\s+\S.
')
@listen_to(r'^【思いつき】.')
@listen_to(r'^思いつき\s+\S.
')
@listen_to(r'^【思い付き】.')
@listen_to(r'^思い付き\s+\S.
')

というような書き方をしているため、例えば

おもいつき パース文字列の多様化
【思い付き】もパースされるようにしてほしい。
いろんな書き方をする人がいると思うので。

という投稿に対して、「おもいつき 」と「【思い付き】」それぞれ文頭にあるので、botが2回listen_func()を実行してしまい、
タイトル「パース文字列の多様化」
本文「【思い付き】もパースされるようにしてほしい。いろんな書き方をする人がいると思うので。」
というGitHubへの投稿も2回なされてしまう。

パースの仕方に問題がありそうなので、Issue #2 で扱っている「正規表現の簡略化」と合わせて解決したい。

文字列パースの正規表現を工夫する

Slackに「おもいつき」が投稿されたと判断するために、投稿文字列のパースをしていますが、現状ではいろいろなパターンを列挙しているに過ぎません。
より柔軟なフォーマットで「おもいつき」投稿に対応するためにも、投稿文字列のパースに工夫が必要かと思います。
正規表現に詳しい方、my_mention.pyで文字列のマッチングや置換をしている部分をいい感じに変えてもらえると助かります。

botの投稿先リポジトリをコードではなく環境変数で指定するように変更

botの投稿先リポジトリがコードに直書きされている
https://github.com/attache-case/omoitsukibot/blob/master/plugins/Github_func.py#L12-L14
ので、

botが稼働しているheroku側で環境変数として

GITHUB_REPO_OWNER = IIS-Lab
GITHUB_REPO_NAME = LightBulb

を登録したのち、(IIS-Labでの運用の場合)

コードの該当部分を

REPO_OWNER = os.environ.get('GITHUB_REPO_OWNER')
REPO_NAME = os.environ.get('GITHUB_REPO_NAME')

に直す。

  • Herokuに環境変数を登録しました。(現在herokuが@attache-caseのアカウントで動いているので、環境変数登録が終わるまでお待ちを・・・)

GitHubからの自動通知が邪魔になる日が来る

おもいつきを追加・コメントを追加するとGithubのLightBulbリポジトリからslackのomoitsukiチャンネルに自動で更新通知が来る。

omoitsukibotがslackの発言を処理してGitHubのLightBulbリポジトリに反映させる機能があらかた完成したら、更新の自動通知は切ってよいと思います。

基準としては

  • おもいつきのGitHubへの自動投稿
  • おもいつきへのコメントもGitHubへ自動投稿
  • おもいつきの発案者・コメントの発言者の情報をGithubに反映
  • slack上での発言編集をGitHubに反映
    あたりが実装できた頃合いで解除するのが良いかなと思います。

omoitsukibotじゃなくて,誰がアイデアを出したか,コメントしたかも記録できる

現状はmy_mention.pyのlisten_function()内で
GHF.make_github_issue(title_body[0], title_body[1], os.environ.get('GITHUB_USERNAME'), None, [])
の部分がGitHubへの投稿をしている。
os.environ.get('GITHUB_USERNAME') を 「Slackでおもいつきを投稿したユーザー名」にすればよさそう。
これにより、GitHub投稿時にAssigneesとして「Slackでおもいつきを投稿したユーザー」が登録される。

slackbotは投稿に対してmessageオブジェクトを受け取り、message.body['text']で本文を読み取っているが、他にユーザーIDの情報もあるので、それを使えばよい。

message.bodyの中身の具体例は以下のようになっている。
{
'type': 'message',
'channel': 'C5L6ZPSNP',
'user': 'U0G9XFYTH',
'text': 'おもいつき 動く観葉植物\n周りの状況に応じて葉っぱが広がったりとじたりして,目隠しやブラインド的に使ったり,場所を移動したりする.',
'ts': '1499323160.093604',
'source_team': 'T048EJ33W',
'team': 'T048EJ33W'
}

このように、'user'はIDで記されているので、名前を別途対応付けないといけない(この例のメッセージ投稿では'koji')。
また、GitHubに投稿する際の引数にする関係上、GitHub上のユーザー名に変換する必要がある。
そのため、omoitsukibotがslackのユーザーIDとGitHubのアカウント名(loginというキーで保存されていた気がする)とを結びつけるハッシュリストだか辞書だかを保持する必要があるかもしれない。

面倒なら、slack上でのユーザー名を思い付き投稿の本文末尾に付与するようにすればよいと思う。

Issueのラベル付けを同時にする

概要

slack で思いつきを投げるときに同時にタグ情報も付与できる良い.タグ情報は手入力でやるものとする.

タスク

既存のタグじゃないと上手く動かないかも?見たことないタグとか来ちゃったらどうしよう?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.