Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: #8 サークル投稿の転送 #294

Merged
merged 30 commits into from
Nov 30, 2023
Merged

Conversation

kmycode
Copy link
Owner

@kmycode kmycode commented Nov 15, 2023

Closes #8

  • データベース定義の作成

自分のサーバーで

  • limited_scope = 'Reply'の追加
  • Activityにcontextを追加
  • 限定投稿に返信として返信
  • 自分のサーバーの投稿に、自分のサークルを指定したうえで返信
  • 自分のサーバーの投稿に、限定投稿以外の公開範囲で返信
  • 自分のサーバーのスレッドの場合、自分のサーバーのアカウントに配信
  • 自分のサーバーのスレッドの場合、他のサーバーのアカウントに配信
  • 他のサーバーのスレッドの場合、他のサーバーに送信
  • 返信者が新しくメンション先アカウントを追加した場合、新しいメンションも含めて送信
  • 自分のサーバーの投稿への返信の削除を送信
  • 他のサーバーの投稿への返信の削除を送信
  • 自分のサーバーの投稿への返信の編集を送信
  • 他のサーバーの投稿への返信の編集を送信
  • 自分の投稿であっても返信の場合は送信先ユーザーリストを見れないようにする
    • 返信先が自分の投稿であっても見れなくする

他サーバーから

  • limited_scope = 'Reply'の受け入れ
  • contextをダウンロード・取得する処理
  • 返信として来た場合
  • 返信でもメンションでもなくただcontextだけを指定してきた場合
  • 他サーバーの投稿への返信がこっちに転送されてきた場合
  • 返信者が追加したメンション先アカウントが、自分のサーバーが認識していないアカウントだった場合
  • 自分のサーバーのスレッドの場合、自分のサーバーのアカウントに配信
  • 自分のサーバーのスレッドの場合、他のサーバーのアカウントに配信
  • 他のサーバーのスレッドの場合、自分のサーバー向けの処理が行われないようにする(メンション付けも含めて)
  • 返信者が新しくメンション先アカウントを追加した場合、新しいメンションも含めて送信
  • 自分のサーバーの投稿への返信の削除を転送
  • 自分のサーバーの投稿への返信の編集を転送

Web UI

  • 公開範囲「返信(限定投稿)」を追加
  • 限定投稿への返信の場合、相手アカウントへのメンションを投稿本文の最初に挿入しない(挿入すると相手側でDMとして認識される)
    • メンションのない返信を受け取ったとき、返信された人に通知が行くようにする(最初の投稿者だけでなく、途中で割り込んできた人も確認する)
    • 返信されたアカウントのホームタイムラインに返信が流れない問題
  • 投稿への返信時にサークルの選択肢に「このサークルへ返信」を追加する、もしくは返信のときだけ公開範囲の選択肢に「返信」を追加
  • 投稿APIで、visibility = limitedの場合にサークルIDの指定がこれまで必須だったが、なくても返信であれば返信として扱うようにする

テスト

  • kmyblueテストサーバー同士
  • kmyblueの投稿にFedibirdから返信
  • Fedibirdの投稿にkmyblueから返信
  • kmyblue同士の投稿・返信をFedibirdから観測
  • kmyblueの投稿にFedibirdから返信したものを第三者がkmyblueから観測
  • Fedibirdの投稿にkmyblueから返信したものを第三者がkmyblueから観測
  • kmyblueから他サーバーへの返信投稿の編集を相手に通知
  • kmyblueから他サーバーへの返信投稿の編集を第三者がkmyblueから観測
  • kmyblueから他サーバーへの返信投稿の削除を相手に通知
  • kmyblueから他サーバーへの返信投稿の削除を第三者がkmyblueから観測
  • kmyblueから他サーバーへの返信投稿の削除を第三者がFedibirdから観測
  • kmyblueでローカルにいる別のアカウントがサークルに含まれる場合、他のサーバーから返信をもらう
  • kmyblueでローカルにいる別のアカウントがサークルに含まれる場合、他のサーバーに返信する

複雑なケース

  • 自分のサーバーの投稿 → 相手が返信 → 自分が返信
    • 相手は自分のサーバーのリストを使って返信するので、転送するのは自分のサーバー
  • 相手のサーバーの投稿 → 自分が返信 → 相手が返信
    • リストは相手のサーバーの方にあるので、転送するのは相手のサーバー

Conversationparent_statusについて

FedibirdのConversationにあるparent_statusプロパティについて、以下の理由からローカルサーバーの投稿のみ必要、リモートに関しては不要と判断する

  • リモートから来た投稿に返信する場合、その投稿に関連付けられたconversationinbox_urlに送信すればいいのでparent_statusは必要がない
    • 元投稿の特定ならびに転送は相手のサーバーが全部やってくれるの前提。そもそも正確な送信先リストは相手しか保有していない
  • 自分のサーバーの投稿に返信する場合、返信元投稿はreplyより明らかなのでparent_statusは必要がない
  • リモートから自分のサーバーの投稿へ返信が来た場合、返信元投稿はreplyより明らかなのでparent_statusは必要がない
  • リモートから自分のサーバーの投稿へ、返信ではなくcontextだけを指定してきた通常投稿の場合、parent_statusから元になる投稿を特定する必要があるので必要
    • statusesテーブルをconversation_idで検索する方法が考えられるが、そもそも1つのconversationは複数のstatusを持ちうるのでどれなのか判別がつかない
    • statusidlimited_scopeで判定するのは、今後の仕様追加や別の仕様変更との競合を考えると危ない
  • リモートからリモートのサーバーへの投稿へ返信が来た場合、返信を転送するのはリモート自身なのでparent_statusは必要がない

なおFedibirdのプロパティ名parent_statusは親の親がいることが分かりづらいので、kmyblueではancestor_statusに置き換える

ところでFedibirdにあるparent_accountってどんな時に必要なんでしょう‥‥?

転送処理とancestor_statusの使用

  • Activityのtocontextのuriが入っており、かつ限定投稿である場合に転送する
    • Fedibirdだと限定投稿である必要はないが、kmyblueの場合は相手サーバーの拡張ドメインブロックを考慮してこの制限をかける
  • ancestor_statusはあくまで投稿を特定する場合のみに使う
  • 転送先は、ancestor_statusのメンション先+新しい投稿で新たに追加されたメンション先
  • もし転送先の中に投稿者自身が入っていない場合(自分に閲覧権限がないスレッドへ返信した)は、転送処理を行わない
    • 編集でメンション消しても内部では残ってるし問題ないよね?
  • inbox_urlのないconversationには転送しない(バージョン9以前のkmyblueでは入ってない)

【参考】現在のActivityの差分

kmyblue

#283 適用後

	"to": [
		"kmyblue:Limited"
	],

Fedibird

	"to": [
		"https://fedibird.com/contexts/xxxxxxxx"
	],
	"context": "https://fedibird.com/contexts/xxxxxxxx",
	"searchableBy": [
		"https://fedibird.com/contexts/xxxxxxxx"
	],

searchableBy#88 で対応するため、今回は対応不要。tocontextだけやる

@kmycode kmycode added this to the kb10.0 milestone Nov 15, 2023
@kmycode kmycode force-pushed the kbtopic-8-circle-reply branch 2 times, most recently from d152676 to d3182a7 Compare November 20, 2023 04:15
@kmycode kmycode force-pushed the kbtopic-8-circle-reply branch from a058b4a to 1d9ff2a Compare November 20, 2023 04:37
Copy link

This pull request has merge conflicts that must be resolved before it can be merged.

Copy link

This pull request has resolved merge conflicts and is ready for review.

Copy link

This pull request has merge conflicts that must be resolved before it can be merged.

Copy link

This pull request has resolved merge conflicts and is ready for review.

@kmycode kmycode marked this pull request as ready for review November 29, 2023 23:42
@kmycode kmycode merged commit a88349a into kb_development Nov 30, 2023
48 checks passed
@kmycode kmycode deleted the kbtopic-8-circle-reply branch November 30, 2023 00:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant