SlackとTwitterにマルチポストしたかったのでmikutterプラグインを書きました
timesチャンネル作ってしまった
今の会社のSlackにはtimes文化がありますが、
times文化とは: またSlackでtimesを始めてしまった|ばんくし|note
私自身はChatwork時代からプロジェクトに関連する話(〇〇ライブラリ使うべきかなあとか)みたいなことは、全部プロジェクトのチャンネルに垂れ流していて、プロジェクトに関係ない会社の話はrandomに、個人的な話はTwitterに書いていて、それで不自由していませんでした。
完全に技術的な話(〇〇言語のここが分からないとか)みたいなのは、その言語使ってることを特に会社が隠しているわけでもないので、 Twitterに流した方が教えてくれる人が居るかもしれないし、会社のチャットとマルチポストしていました。
でもそういうのはかなり稀なので、 2018年に ncaq/mikutter_post_sync_clipboard: mikutterで投稿した内容をクリップボードにも保存しますと言うのを書いて、それでペーストするだけで満足していました。自動化するにもプロジェクトごとにチャンネルは違うので選択しにくいですしね。
でも社内のことでなおかつ個人的なことを書くこともありそうだなと思ってSlackにtimes作って、 Twitterとtimesにマルチポストすることも増えたのでペーストの作業不毛だなあと思って自動化することにしました。
iftttでは満足出来ませんでした
最初に試したのはIFTTTを使う方法で、これで#times
ハッシュタグを付けた私のツイートをURL転載で転送する方法を試しました。
一々ハッシュタグ書いてられないのでそこは適当なキーバインドのときにフッタをつけてつぶやくためのmikutterプラグイン(設定画面からフッタ文字列を追加してね)を使いました。
でもちょっと満足出来ませんでした。
- 反映が遅い
- 投稿アイコンと名前がiftttのものになる
- ツイートに本題と関係ないなぞハッシュタグがつくのがいや
そういうことつぶやいてたらゆっくりしないに
それwebhookをmikutterから叩くんじゃだめなの
って言われたので確かにそうだよなあって思ってプラグインを書くことにしました。
プラグインを書きました
それで出来たのが ncaq/mikutter_post_it_with_slack: Twitter(Mastodon)とwebhook先のSlackに同時投稿するです。
投稿の様子はこのようになっています。
後現在のworldを参照するだけなので一応Mastodonにも対応しているはずです。試してませんが…
色々妥協しました。
as_user
使えないけどこれで良いとすることにしました
webhook形式だとユーザを自分のものにするas_user
は使えないらしく、アプリを作ってtokenを作る必要があるのですが、仕事ならともかくこんな些末なことでアプリの権限とか考えるの面倒なのでas_user
は諦めてwebhookにしました。
webhookなら能動的には書き込みしか出来ないからURLが漏洩したりしても比較的安全(だよね?)。
マルチポストはそうと周りが分かったほうが良いという考えもあるので、
as_user
の使用は一長一短ですね。
ただ1つだけ大きな難点があることに気が付きました。投稿ユーザが自分ではないので、メンションはともかくスレッドを開く形で返信されても気がつけないかもしれません。 timesなら致命的な問題にはならなさそうですが… botへのスレッドを自分に向ける方法はあるのでしょうか?
TwitterのURL取得方法がよく分からなかった
最初はTwitterのURL取得してそれを貼り付けようと思ったのですが、自分が投稿したら発火されるイベント見つけられなかったし、そもそもイベントだとツイートにSlack投稿属性があるのかよく分かりません。
コマンドでpost_it
してDelayer上でトラップしてどうこうするのが正解なのでしょうが、それやるにはモンキーパッチを書かざるを得ない気がしますし、それは嫌です。
後iftttでのURL貼り付けだと
やっぱりbotに荒らされてるみたいに見える
と言う意見もあったので、
as_user
使わなければユーザ名とかアイコンでマルチポストだと分かるしテキスト本文だけで良くない?
と思って本文だけ送ることにしました。
OGPに頼るよりコンパクト。
Twitter(Mastodon)に投稿成功してるかよく分からない
post_it!
コマンドの例外制御を全くやっていないので、
Twitterに何らかの理由で投稿失敗しても気が付かずにSlackだけに投稿されてしまう恐れがあります。妥協しました。