指定したユーザーの鍵投稿をフィルターする機能を実装してみた
その場のノリでMastodonを改造してしまう人類…
ブログ生やしてみました。ブログ生やしたことはまた別記事ででも紹介することにします、気が向いたら。
それじゃ、本題の 指定したユーザーの鍵投稿をフィルターする Mastodonの改造を紹介します。
そもそもなんで作ろうと思ったのか
1/2の朝6時くらいに眠いなーまだ寝たいなーなどと思いながらHTLを遡っていたら、
フォローはしたいがフォロワー限定にするような話題は読みたくない
なんて話を目撃して、何故かやる気がもりもりと湧いてきてしまった…という次第
とりあえず先に機能紹介
他にも書きたいことはあるけど、とりあえずどんな機能なのか紹介します。試してみたい方は 小田急don external_link に実装してあるので使ってみてください。
Mastodonのキーワードフィルター機能を利用して、指定したユーザーの鍵投稿を非表示にします。
フィルターするキーワードは、 private-filter:@username@domain
で、
必ず 隠すのではなく除外する
にチェックを入れます。
絶対に、 隠すのではなく除外する
にチェックを入れてください。(大事なことなので)
ローカルのユーザーを指定するときは、 private-filter:@username
で大丈夫です。
投稿者のタイムライン
フィルターされたタイムライン
技術的な話
とりあえず、今回の改造分のソースコードはこちら。
ブランチ: 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
って書いてあります。