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

その場のノリでMastodonを改造してしまう人類…


ブログ生やしてみました。ブログ生やしたことはまた別記事ででも紹介することにします、気が向いたら。

それじゃ、本題の 指定したユーザーの鍵投稿をフィルターする Mastodonの改造を紹介します。

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

1/2の朝6時くらいに眠いなーまだ寝たいなーなどと思いながらHTLを遡っていたら、

フォローはしたいがフォロワー限定にするような話題は読みたくない

なんて話を目撃して、何故かやる気がもりもりと湧いてきてしまった…という次第

とりあえず先に機能紹介

他にも書きたいことはあるけど、とりあえずどんな機能なのか紹介します。試してみたい方は 小田急don external_link に実装してあるので使ってみてください。

Mastodonのキーワードフィルター機能を利用して、指定したユーザーの鍵投稿を非表示にします。

20190102113226.png

フィルターするキーワードは、 private-filter:@username@domain で、

必ず 隠すのではなく除外する にチェックを入れます。

絶対に、 隠すのではなく除外する にチェックを入れてください。(大事なことなので)

ローカルのユーザーを指定するときは、 private-filter:@username で大丈夫です。

20190102113919.png
投稿者のタイムライン

20190102113950.png
フィルターされたタイムライン

技術的な話

とりあえず、今回の改造分のソースコードはこちら。

ブランチ: accelforce:custom/private-filter external_link (tootsuite:masterがベースで、不定期でマージされたり追加コミットされたりします)

コミット: accelforce@974d34d external_link

処理内容としては、公開範囲がフォロワー限定より狭く(小さく?)、フィルターで指定されたIDのユーザーに一致した投稿を非表示にしているだけ。思ったよりスマートにまとまって結構びっくり

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

最初はブロックとかミュートと同じような実装にしようかなーなどと考えながらブロックの実装を読んでみると…まぁめんどくさそうな香りがプンプンと漂ってきて…

まずデータベースに専用のテーブルを用意しなきゃいけなくて…とか考えていたらやる気がなくなった。困った困った。

そこでふと思い出した。

キーワードフィルターをすると鍵投稿以外も消してしまうかもしれない

なんてトゥートをさっき見かけたぞ…

キーワードフィルターを流用するならそこそこ簡単に実装できるのでは?

というわけでキーワードフィルターの実装を追っかけることになったわけです。

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

あんま関係ない話ですが、文字列の17文字目以降( private-filter:@ 以降)を切り出そうと思ったときに、Ruby 2.6の終端のないRangeを使うと str[16..] って書けてわかりやすいな、と。

ちなみに自分のインスタンスはRuby 2.6の更新はしてなかったので わざわざ更新するのもめんどくせーから 16..-1 って書いてあります。