slackのメッセージをひたすら読み上げさせるコマンドを作った

概要

作業に没頭してると slack のメッセージを取りこぼしてしまうことが多いんですが,これを読み上げてくれば便利だなと雑に作ってみました.

ゲーム実況なんかで,来たメッセージを bot に読み上げさせて,プレイしながら回答してやつのイメージです.

github.com

必要環境

mac というか say コマンドが必要です.

インストール

go get github.com/ikawaha/slacksay/...

使い方

slack トークンを用意して,手元の計算機で下記を実行すれば ok です. トークンの取得はとりあえずレガシートークhttps://api.slack.com/custom-integrations/legacy-tokens を取得するか,過剰な権限が気になるなら https://api.slack.com/apps この辺で取得してください.

slacksay -t <slack_token> [-d (<json data>|@<file_name>|@-)]
  -d string
        json data. If you start the data with the letter @, the rest should be a file name to read the data from, or -  if you  want to read the data from stdin.
  -t string
        slack token

ex.

slacksay -t xoxp-your-token -d '{"bot_message": "true"}'

仕組み

slack に流れてきたメッセージを say コマンドに渡すだけです.

だだし,それだけだとカエルの合唱みたいになってしまうので,slack のメッセージを一端 queue にいれて,整列させてからコマンドに渡します. いろいろ試したんですが,喋らせるのは1つだけにしておくのが無難だというところに落ち着きました.

goroutine 使ったコード書くのは面白いですね!

あと,say コマンドが必ずしも正しく読みを当ててくれるわけではないので,ユーザー名とか読み替えを指定できるようにしてあります.

チャンネルやユーザー,キーワードでのフィルターも用意してみましたが使ってないのでこの機能が必要なのかよく分かっていません. ぼくの環境では,bot のメッセージ(slack では SubType が bot_messageとなるやつ)は除外しないとうるさくてしょうがなっかったので, これを無視するオプションを用意してあります.

say コマンドの代わりに他のコマンドを指定するオプションを用意してありますが,これも不要な気がしています. もしかしたら windows でも似たようなコマンドないかな・・・みたいな期待はあるのですが,実機がないので・・・.

未解決

say コマンドはオプション指定すると声色を変更できるのですが,exec.Command() で指定するとうまく実行できませんでした. なぜだろうか・・・.

Happy hacking!