Slackの特定のチャネルを開いて定型文を入力したい。具体的にはAPIでは発火できないスラッシュコマンドを実行したい。
特定のチャネルを開く簡単な方法は、Slackアプリに用意されている Deep Link を使うことです。
この場合は slack://channel
を使うと目的を達成できます。試すには open slack://channel?team=<チームID>&id=<チャネルID>
みたいにすると良い。
IDはWeb版で目的にチャネルを開くとURLに含まれているので、2つ合わせてゲットするにはそこからが速いかも。
AppleScript でこれを開くにはいくつか方法がありますが、今回は System Events
を使います。
(System Events についてのドキュメントを発見できなかったのだけれど誰か教えてください。)
tell application "System Events" open location "slack://channel?team=<チームID>&id=<チャネルID>" end tell
System Events
を使ったのは文字入力をするための布石で keystroke
を使っていきます。
keystroke "Hello"
のようにすると、キーボードから Hello
と入力したのと同様の結果が得られます。
tell application "System Events" keystroke "Hello" end tell
ただしここで問題が生じます。キーストロークなので日本語をそのまま与えてもおかしなことになります。 キーボード操作を考えても、IMEをオンにして、文字を入力、変換して、確定という操作をしているので当然です。
そんな面倒なことを再現しないといけないのかというとそうでもなくて、クリップボードを使うと実現できます。
set the clipboard to "日本語でこんにちは" tell application "System Events" keystroke "v" using {command down} end tell
using {command down}
で Cmd
を押しながら別のキーを押すを実現できます。
これで Cmd+v
をして貼り付けすることが出来ます。
これらを組み合わせると以下のように特定のチャネルに定型文を投稿することが可能です。
ここでは ジョブカン のスラッシュコマンドを実行しています。 メッセージも入力したいので引数を受け取れるようにしました。
on run argv set message to item 1 of argv set the clipboard to "/jobcan_touch " & message tell application "System Events" open location "slack://channel?team=<チームID>&id=<チャネルID>" delay 1 keystroke "v" using {command down} delay 0.5 keystroke return end tell end run
これで人力でやっていたチャネルを開いて、入力して、投稿の3ステップの操作が1ステップで完了できるようになりました。
べんりですね。