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

By: kyori
Posted: January 02, 2019

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

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

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

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

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

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

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

とりあえず先に機能紹介

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

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

An image from Notion

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

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

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

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

An image from Notion投稿者のタイムライン
An image from Notionフィルターされたタイムライン

技術的な話

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

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

コミット: accelforce@974d34d

ソースコード

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

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

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

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

そこでふと思い出した。

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

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

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

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

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

あんま関係ない話ですが、文字列の17文字目以降( private-filter:@ 以降)を切り出そうと思ったときに、Ruby 2.6の終端のないRangeを使うと

str[16..]

って書けてわかりやすいな、と。

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