attache-case / omoitsukibot Goto Github PK
View Code? Open in Web Editor NEWA slack bot that automatically post your omoitsuki to IIS/LightBulb as an Issue
A slack bot that automatically post your omoitsuki to IIS/LightBulb as an Issue
Issue #3 のようにおもいつきへのコメントのフォーマットを定めてしまってもよいのですが、Slack上での操作としては、おもいつきの投稿に直接threadするのが単純なので、これにbotが反応するようにできると嬉しいと思います。
今動かしている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つくらいありそうです
LightBulbリポジトリに行かないとイシュー番号が何番だったか分からなくなりそうですし、omoitsukiチャンネルの過去の投稿を遡るのも大変なので、何かしら支援したほうが良さそう。
GitHubへの投稿にPyGithub関係のモジュールを使う場合は、requirements.txtに追加を忘れずに。
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を使った認証にする。この書き方で良いかは不明。
のような変更をすれば良さそう
必要か分からないけれど・・・
コードはこういう風に書いた方が良い!という意見があれば作っていただきたい
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の投稿先リポジトリがコードに直書きされている
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')
に直す。
おもいつきを追加・コメントを追加するとGithubのLightBulbリポジトリからslackのomoitsukiチャンネルに自動で更新通知が来る。
omoitsukibotがslackの発言を処理してGitHubのLightBulbリポジトリに反映させる機能があらかた完成したら、更新の自動通知は切ってよいと思います。
基準としては
コメントアウトの英語がおかしいので直す
現状は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上でのユーザー名を思い付き投稿の本文末尾に付与するようにすればよいと思う。
slack で思いつきを投げるときに同時にタグ情報も付与できる良い.タグ情報は手入力でやるものとする.
既存のタグじゃないと上手く動かないかも?見たことないタグとか来ちゃったらどうしよう?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.