Project

General

Profile

機能 #1326

Mastodonプラグイン

Added by toshi_a 初音 3 months ago. Updated 2 months ago.

Status:
終了
Priority:
通常
Target version:
Start date:
2019-04-23
Due date:
% Done:

0%

プラグイン名:
mastodon

Description

MastodonクライアントAPIを利用してMastodon Worldを提供するプラグインをバンドルする。

cobodo/mikutter-worldon を改変したものを利用する。

プラグインには、以下の変更を加える。

  • Plugin slugを mastodon にする
  • Worldon Worldのアカウントをいい感じに引き継ぐ

以下の作業は別のチケットで行う

  • プラグインの機能ごとに細分化

Associated revisions

Revision 8a75e76d (diff)
Added by toshi_a 初音 3 months ago

WorldonプラグインをMastodonに改名 refs #1326

Revision 12b9fa1b (diff)
Added by toshi_a 初音 3 months ago

[mastodon] commandとspellでmastodon worldの判別に専用spellを使う refs #1326

Revision 638fd8ea (diff)
Added by toshi_a 初音 3 months ago

[mastodon] SSE関連でよくエラーになる refs #1326

Revision ecf0b3d7 (diff)
Added by toshi_a 初音 2 months ago

SSEプラグインを分離 refs #1326

Worldonプラグインと共存できるようにした

Revision 4f4b48de (diff)
Added by toshi_a 初音 2 months ago

Mastodon(Mastodon) refs #1326

Revision 07ce88a6 (diff)
Added by toshi_a 初音 2 months ago

リファクタリング refs #1326

Revision 17eb1077 (diff)
Added by toshi_a 初音 2 months ago

Threadの利用が不要な場所で使わないようにした refs #1326

Revision 6dafa715 (diff)
Added by toshi_a 初音 2 months ago

SSEエラー処理 refs #1326

Revision b43f7d59 (diff)
Added by toshi_a 初音 2 months ago

SSEで受け取ったイベントを処理できてなかった refs #1326

Revision a20c4d42 (diff)
Added by toshi_a 初音 2 months ago

APIリクエスト周りのメソッドをリファクタリング refs #1326

Revision c517eb03 (diff)
Added by toshi_a 初音 2 months ago

mastodonをnetwork_inspectorに対応 refs #1326

Revision 6608cd5c (diff)
Added by toshi_a 初音 2 months ago

mastodon APIリクエストを行うメソッドは、原則Deferredを返す refs #1326

Revision a12febcf (diff)
Added by toshi_a 初音 2 months ago

Mastodonプラグインのクライアント名をmikutterにする refs #1326

History

#1

Updated by toshi_a 初音 2 months ago

topic/1326-mastodon ブランチで開発していきます。

#2

Updated by toshi_a 初音 2 months ago

RESTとStreamingが排他になっているが、mikutterの考え方ではRESTは常に動かしていたほうが良いかも。

また、投稿完了のレスポンスやリプライをホームTLに突っ込むなど、データソースとAPIエンドポイントを一対一で考えるのではなく、経路問わず取得できたデータを適切なデータソースに流す。

データソースがAPIと一対一になっていない理由

  • サーバのトラブル等で特定のエンドポイントだけが死んでいたりすることがあり、そのときに生きているAPIだけで可能な限り使えるようにするため。
    • Mastodonではそういうこと無さそうだが、他のサーバのLTLから自分のHTLを部分的に提供するといったことは可能

RESTが常に動いている理由

  • Twitterでは、UserStreamだけ停止する、接続はできるがイベントが送られてこないといったことがあり、どちらも信用できなかった
    • 半端に取りこぼすこともあって、UserStreamでは全てのツイートを受信できている保証はない
      • とおもったらだいぶ後になって送られてきたりな…
    • Mastodonでは大丈夫そうだが、やってはいけない明確な理由がないならmikutterらしい仕様にしたい
#3

Updated by cob odo 2 months ago

いずれも賛成です。
WorldonでAPIとdatasourceが一対一になっているのは、単に実装が楽だからです。
現在ではフォロー一覧やリストのメンバー一覧のような情報もworldに持たせていたと思うので、適切なdatasourceにそれぞれ流すことはそれなりにできそうです。FTLだけは無理がありそうです。

インスタンス管理者視点だと、ストリーミング機能だけnode.jsで提供されているので、アップデート時に何らかの理由でnode.js側だけがコケて、解決するまでとりあえずRoR(=REST+WebUI)だけ動かしておくようなズボラな管理者は存在するかも知れません。逆にnode.jsだけ動かす場合は、投稿も出来なければActivityPubに反応もできないので、意味が無くなります。

ところでふと思いましたが、worldのマイグレーション以外にも抽出タブのマイグレーションが必要そうですね。

#4

Updated by cob odo 2 months ago

sse_clientについては一応汎用なつもりで作りましたが、Mastodonでしか動作確認していませんし、この分離方針で問題ないと思います。
ただ、イベント名をsse_*プレフィクスから別のものに変えておかないと、Worldonと共存したときに二重のコネクションが張られると思います。mastodon_sse_*プレフィクスあたりが妥当でしょうか。

#5

Updated by toshi_a 初音 2 months ago

ところでふと思いましたが、worldのマイグレーション以外にも抽出タブのマイグレーションが必要そうですね。

他にもマイグレーションできるものとしてはcommandなどもあります。

sse_clientについては一応汎用なつもりで作りましたが、Mastodonでしか動作確認していませんし、この分離方針で問題ないと思います。
ただ、イベント名をsse_*プレフィクスから別のものに変えておかないと、Worldonと共存したときに二重のコネクションが張られると思います。mastodon_sse_*プレフィクスあたりが妥当でしょうか。

既にこの方針で実装しているのですが、なんか動かないなぁ

#6

Updated by toshi_a 初音 2 months ago

SSEも受信できるようになったのでだいたいこれでOK。残りは別のチケットでやったら良いかも。

Worldon Worldのアカウントをいい感じに引き継ぐ について

#1329 でWorldonをアンインストールしてもMastodonプラグインが残るようになったことから、手動でのアカウント引き継ぎが現実的になった。
自動的にやる場合は、Worldonプラグインを機能毎にプラグインに分けた後、それぞれのプラグインに対してどのようなデータ移行が必要になってくるか検討する必要がある(抽出タブとか、コマンドショートカットとか)。

最も問題になるのがデータを移すタイミングで、起動したら必ず移すのか、Worldonがアンインストールされていることを検知してやるのか、などわりと悩みどころが多い。
いっそ何もやらないほうがわかりやすい気もするので、別チケットにするか、一旦ペンディングにしてもいいかも

#7

Updated by toshi_a 初音 2 months ago

先に、APIリクエストを全てDeferredを返すものにしておきたい。
呼び出し側がメソッドを使うときに毎回Threadを使うべきか判断しているのでミスが発生しそう。

#8

Updated by toshi_a 初音 2 months ago

  • Status changed from 新規 to 終了

developにmergeしました。

Also available in: Atom PDF