指定したユーザーの鍵投稿をフィルターする機能を実装してみた

Date2019/01/02
Authorkyori .
その場のノリでMastodonを改造してしまう人類…

ブログ生やしてみました。ブログ生やしたことはまた別記事ででも紹介することにします、気が向いたら。
それじゃ、本題の 指定したユーザーの鍵投稿をフィルターする Mastodonの改造を紹介します。

そもそもなんで作ろうと思ったのか

1/2の朝6時くらいに眠いなーまだ寝たいなーなどと思いながらHTLを遡っていたら、
フォローはしたいがフォロワー限定にするような話題は読みたくない
なんて話を目撃して、何故かやる気がもりもりと湧いてきてしまった…という次第

とりあえず先に機能紹介

他にも書きたいことはあるけど、とりあえずどんな機能なのか紹介します。試してみたい方は 小田急don に実装してあるので使ってみてください。
Mastodonのキーワードフィルター機能を利用して、指定したユーザーの鍵投稿を非表示にします。
notion image
 
フィルターするキーワードは、 private-filter:@username@domain で、
必ず 隠すのではなく除外する にチェックを入れます。
絶対に、 隠すのではなく除外する にチェックを入れてください。(大事なことなので)
ローカルのユーザーを指定するときは、 private-filter:@username で大丈夫です。
投稿者のタイムライン
投稿者のタイムライン
フィルターされたタイムライン
フィルターされたタイムライン

技術的な話

とりあえず、今回の改造分のソースコードはこちら。
ブランチ: accelforce:custom/private-filter (tootsuite:masterがベースで、不定期でマージされたり追加コミットされたりします)
コミット: accelforce@974d34d
ソースコード
処理内容としては、公開範囲がフォロワー限定より狭く(小さく?)、フィルターで指定されたIDのユーザーに一致した投稿を非表示にしているだけ。思ったよりスマートにまとまって結構びっくり

キーワードフィルターを流用することになった経緯

最初はブロックとかミュートと同じような実装にしようかなーなどと考えながらブロックの実装を読んでみると…まぁめんどくさそうな香りがプンプンと漂ってきて…
まずデータベースに専用のテーブルを用意しなきゃいけなくて…とか考えていたらやる気がなくなった。困った困った。
そこでふと思い出した。
キーワードフィルターをすると鍵投稿以外も消してしまうかもしれない
なんてトゥートをさっき見かけたぞ…
キーワードフィルターを流用するならそこそこ簡単に実装できるのでは?
というわけでキーワードフィルターの実装を追っかけることになったわけです。

終端なしRangeが欲しくなった話

あんま関係ない話ですが、文字列の17文字目以降( private-filter:@ 以降)を切り出そうと思ったときに、Ruby 2.6の終端のないRangeを使うと
str[16..]
って書けてわかりやすいな、と。
ちなみに自分のインスタンスはRuby 2.6の更新はしてなかったので わざわざ更新するのもめんどくせーから 16..-1 って書いてあります。