@circledev Mastodonの内部実装としては、投稿はstatusというモデルに保存されています。

statusにはvisibilityパラメータがあり、投稿した際は指定した通りになります。

リモートからActivityPubで届いた場合は、toにpublicが指定されていれば公開、ccにpublicが指定されていれば未収載、toに投稿者のフォロワー(コレクション)が指定されていればフォロワー限定、それ以外をダイレクトと認識します。

また、本文からメンション表記を抽出し、これをmentionモデルに記録します。statusには、このmentionが複数紐付けられます。

ActivityPubでは、サーバの代表窓口となるshared_inboxと、アカウント毎の窓口である個別のinboxがあり、inboxに届いた場合は暗黙のmentionが行われている(そのユーザーを宛先にしている)と解釈するようになっています。

この時、visibilityがダイレクトの投稿をlimitedに変更します。

@circledev あるユーザーが投稿を読むことができるかは、このvisibilityとフォローの有無、mentionに基づいて判断されます。

投稿した本人は、自分の投稿であればすべて読めます。

公開、未収載はだれでもOKです。

フォロワー限定は、フォロワー限定となりますが、メンションが含まれている場合は、メンションされたユーザーも読むことができます。

ダイレクトについては、メンションされたユーザーだけ読むことができます。

フォロー

@circledev どのタイムラインに配送されるか、どんな投稿がタイムライン上で表示を抑制されるか、というのは、visibilityやmentionの有無、relpyやフォロー関係に基づいて判断されますが、ひとまず割愛します。

ActivityPubの表現としては、btoやbcc、audienceなども宛先として指定できますし、例えば投稿者以外のフォロワーコレクションを指定することもできますが、これをフルサポートしている実装は……あるのかな。少なくともMastodonでは、この一部だけにしか対応していません。

フォロワーのコレクションはurlになっていて、そこにアクセスすれば一覧を取得できますが、これは実際には見に行きません。また、先方が非公開にしている場合もあります。

実際に使われているのは、そのサーバに記録されている投稿者のアカウント情報と、それに紐付けられている、ローカルのフォロワー情報だけです。リモートのフォロワーについては関知していません。

このフォロワー情報は、フォローのやりとりで構築されるもので、先方がDBロールバックしたりすると不一致になることもあります。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。