Pleromaでは削除アクティビティのobjectのURLにアクセスすると404が返ってくる仕様ですので、下記の処理でコケてしまい投稿が正常に削除されません。
自分で修正を行ってみようと行ってみようと思い、Mastodon側の実装などを読んでいたのですが、ここはResolverを通さずdeleteNoteに直接投げてしまえばと思ったのですが、どうなんでしょうか...?
https://github.com/mfmfuyu/misskey/commits/patch-delete-activity (仮実装なので雑です)
投稿が正常に削除される
投稿が削除されない
↑
まず、削除対象objectがPost(Note)なのかActorなのか確定させる必要があって (Misskey今Actor消す処理無いので常にDeleteNoteしかないですが)
そして、削除対象objectのパターンは3つ考えられて
1つ目がhttps://example.com/objects/0001のようなstringが来るパターンで、これはリモートresolveする必要があるのですが
リモートでは間違いなく消えてるのでリモートresolveせずにtype保留にしてます。
※ここが問題のリモートアクセスして404返されてそのまま終わってしまうという部分の解消ですね。
2つ目がTombstone送られてくる場合で、これは実装によってはformerTypeで元のtypeが取得できることがあるので
可能ならばここで元のtype取得しています https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tombstone
{
"type": "Tombstone",
"id": "https://example.com/objects/0001",
"formerType": "Note"
}
3つ目が元のオブジェクトがそのまま送られてくる場合で (まずないと思いますが)
この場合は元のtypeとして扱うようにしています。
{
"type": "Note",
"id": "https://example.com/objects/0001"
}
そしてここまで来て元のtypeが確定できない場合 (まずこれになりますが)
「対象objectのid が Acticity Actor と同一の場合 それはtype=Actorに違いない」ということが成り立つため
その場合はtypeをActor (ここでは暫定的にPerson) として確定させています。
これはMastodonでいうここだと思います。
https://github.com/tootsuite/mastodon/blob/d48a1289e448b5d21f3cd9f5dd07e539e97a2b4c/app/lib/activitypub/activity/delete.rb#L5
見た感じMastodonのPost or Actor を分岐は、結局この判定しかしてないないみたいですが。
そして、対象が Post or Actor かによって処理を分岐させています。 (Actorを消す処理は今ないですが…)
おそらく https://github.com/syuilo/misskey/issues/5642 の2の事象と同じ
なるほど、Actorの削除通知も捌く必要があったのですね
私の実装よりもmei23さんの実装の方が良いので、マージはそちらの変更の方が良さそうですね。
また、#5642 に関してはIssueを見逃しておりましたが同じ事象のようですね。
重複してしまっているので #5642 にまとめるために、こちらのIssueは閉じようと思います。