pockestrap

Web Programmer's memo

ブロックしている人をミュートするmikutterプラグインを作った

作った後に調べたら似たようなプラグインが既にあったんだよなぁ…(真顔
Phenomer / mfilter — Bitbucket

というわけでプラグイン作りました。わいわい
pocke/mikutter_blocked_user_mute · GitHub
ブログを書いた時点でのコードはこちら
pocke/mikutter_blocked_user_mute at b94804db292099c46e6dea4ba5e2994b561ab899 · GitHub

blocked_user_mute.rb L7-11

module MikuTwitter::APIShortcuts
  def blocked_ids
    cursor_pager(self/'blocks/ids', :json, :ids, {})
  end
end

ここでMikuTwitter::APIShortcutsにモンキーパッチを当てています。
cusor_pagerは、core/lib/mikutwitter/api_shortcuts.rb で定義されています。
blocks/idsは5000件ごとしか取得できないので、cusor_pagerを使って全件まとめて取得しています。
定義したblocked_idsは、

Service.primary.twitter.blocked_ids

の用に使います。

んで後はfilter_show_filterでrejectすればいいだけ…なのですが、どうやらリツイートされてきたツイートのuserはリツイートしたユーザーのものが返るようです。
それだと都合が悪いので
blocked_user_mute.rb line 21-25

if msg.retweet? then
  block_list.include?(msg.retweet_source[:user].id)
else
  block_list.include?(msg.user.id)
end

の用にretweeet?の結果で別のところを見ています。

引っかかったのはそのくらいですかね。また引っかからないように備忘録として