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

Groupアクターを扱えるようにする #5739

Closed
wants to merge 3 commits into from

Conversation

noellabo
Copy link
Contributor

Summary

Group Actorを受け付け、扱えるようにします。

https://github.com/syuilo/misskey/pull/5733 の変更とあわせて、gup.peなどグループ機能を提供するActivityPubサーバや、ハッシュタグリレーなどのGroupタイプのActorとやり取りができるようになります。

@u1-liquid
Copy link
Contributor

Misskey にはすでにグループ機能かあるので、ユーザーをグループとして扱ってグループアクターを実装するよりはグループ機能を連合させたほうが良さそうですね。

@acid-chicken
Copy link
Member

Related to #3218
Related to #5133
Related to #5534
Related to #5535
Related to w3c/activitypub#328

@mei23
Copy link
Contributor

mei23 commented Jan 21, 2020

Misskey にはすでにグループ機能かあるので、ユーザーをグループとして扱ってグループアクターを実装するよりはグループ機能を連合させたほうが良さそうですね。

最初、AP Group のマップ先はUserテーブルで大丈夫か?Groupじゃない?と思ったけど
User <=> Group 間で一意性を保証しなければならないカラムがあるので
Userテーブルに入れちゃったほうが楽なのかなと思いました。

あと、PersonだかGroupだからわからないURIで表記されたAP Actorを解決する際に
User, Groupテーブル両方から探索するのも、めんどくさいしなんか重くなりそうとか。

でも、Groupフラグ付きでUserテーブルに入れるだけだと、あちこちでUser扱いで出てきちゃうと思うので悩みどころ。

また、gup.peの言うGroupが、type=Groupになっている同報してくれるユーザーに過ぎないのでは
とも思われるので、これを元にGroupの挙動やmodelを定義してしまうと、後々Usersをぶら下げられる真Groupを連携したくなったときに困りそうなのも悩みどころ。

かなと。

@mei23
Copy link
Contributor

mei23 commented Jan 21, 2020

そもそもAPのGroupがMisskeyのユーザーをぶら下げられるGroupと違うのかもしれない

@noellabo
Copy link
Contributor Author

ふむ、なかなか難しいですね……。
たしかに、安易に現行のGroupアクターを受け入れてしまうと後に面倒なことになるかもしれません。
本PRは当面ペンディングとして、グループ機能の連合 https://github.com/syuilo/misskey/issues/5535 の議論を先行した方が良さそうですね。

@mei23
Copy link
Contributor

mei23 commented Jan 21, 2020

MastodonはGroupでも普通に受け入れて、
クライアントにもそのまま流しちゃう (ただしフラグ付きで) みたい。

@noellabo
Copy link
Contributor Author

Pleromaも普通に通るのでMisskeyも通しちゃっていいかなと思ったんですが、まぁあせらずいきましょう。

@mei23
Copy link
Contributor

mei23 commented Jan 21, 2020

他にGroupを普通のユーザーとして扱う実装がある時点で
もうMisskeyのGroupをAP Group にマップできない気がしたので
普通に通してもいいのではと思ってました。

過去に Group, Organization までは通そうかどうかとしていた気がします。
Applicationがたまに特殊な使われ方しているので悩んでいた記憶。
@acid-chicken そんなプルリクがあった気がするけどみつからないです。

@@ -191,6 +198,7 @@ export default define(meta, async (ps, user, app) => {
if (ps.bannerId !== undefined) updates.bannerId = ps.bannerId;
if (typeof ps.isLocked == 'boolean') updates.isLocked = ps.isLocked;
if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
if (typeof ps.isGroup == 'boolean') updates.isGroup = ps.isGroup;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一般ユーザーが自分をGroupとして名乗ることを許しちゃうので
isGroupが変更できるとまずい気がします。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おおっと。削除します。

@@ -94,7 +94,7 @@ export const meta = {
carefulBot: {
validator: $.optional.bool,
desc: {
'ja-JP': 'Botからのフォローを承認制にするか'
'ja-JP': 'BotとGroupからのフォローを承認制にするか'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AP Groupが何を表すかが実装によって違う可能性があって
AP Groupが必ずしも自動だとは限らないのと、
これはオプション的な機能で、直近でGroupにそのままフォローされて困るという事象はなさそうなので
なしでいいかもと (私は) 思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AP Groupによるフォローを保留・拒否されると、機能として自動化されたフローを阻害することがあるため、Botと同等扱いしない方が安全ということもありました。今はまだBotとみなさなくても大丈夫そうですし、削除します。

@mei23
Copy link
Contributor

mei23 commented Jan 21, 2020

おそらくこのプルリクエストには

  1. リモートからのActor type=Groupを受け入れてAPI/UIに反映する
  2. ユーザーが自分をGroupとして名乗ることを許してそれをAPで公開する

が含まれていますが、とりあえず2は入れないほうがいいのではと思いました。

1 は https://github.com/syuilo/misskey/pull/5739#issuecomment-576738327 みたいな理由もあるので、入れちゃっていいのではと思いました。
(Misskey の Group を連合しようとすると AP Actor type=Group 以外の場所に載せたほうがいい感)

また、Groupを許可するくらいならOrganizationも許可したいかなと思いました。 (誰がいつやるかはともかく)

@acid-chicken
Copy link
Member

過去に Group, Organization までは通そうかどうかとしていた気がします。
Applicationがたまに特殊な使われ方しているので悩んでいた記憶。
@acid-chicken そんなプルリクがあった気がするけどみつからないです。

自分もこれ結構議論したような記憶があるのですが、それっぽい Issue/PR はないですね……。一旦 twista で試してみた上で実装方針を提案するとかだったかもしれません。(twista では標準の Actor をひとまずフラグだけつけて受け入れるのと、Organization Actor から Activity を配信するといった実装を現状適用しています。)

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

一般ユーザーが自分をGroupとして名乗ることを許しちゃうので

ん、ではMisskey上でアカウントをGroupとして設定したい場合はどうするのかしら

@rinsuki
Copy link
Contributor

rinsuki commented Jan 28, 2020

isGroupとisBotだと isGroup && isBot になりうるのが気になる
(とはいえやるとしても DB で isGroup && isBot を許可しない制約を貼るぐらいしかなさそう)

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

isGroupとisBotだと isGroup && isBot になりうるのが気になる

あ~
根本的に解決するにはUsersにtypeなどのプロパティを生やすしかないのかぁ

@u1-liquid

This comment has been minimized.

@acid-chicken
Copy link
Member

(ここでまたPersonでもないのにUsersに入れていいのという問題)

何かありましたっけ?

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

(ここでまたPersonでもないのにUsersに入れていいのという問題)

む、どういうことかな
GroupのことならGroupはAP上ではPersonと同じような扱いな気がするし問題はなさそう

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

isGroup && isBot 問題はv12のついでに解決しても良さそう
考えられる影響としてはすべてのユーザーのisBotが解除されてユーザーのプロパティからisBotが消えるくらい

@rinsuki
Copy link
Contributor

rinsuki commented Jan 28, 2020

解除されるのはさすがにあれだしマイグレーションしてほしい

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

解除されるのはさすがにあれだしマイグレーションしてほしい

面倒そう
まあやれたらやりたい

@acid-chicken
Copy link
Member

個人的には Bot が Service 名乗らなくなるケースが発生するのはマイグレできないならやめてほしいレベル

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

Bot が Service 名乗らなくなる

現状でもBotなのにBotフラグ立ててないケースは目立つのでそこまで問題ではない気もしてる

@acid-chicken
Copy link
Member

現状でもBotなのにBotフラグ立ててないケースは目立つ

twista.283.cloud に認識された Bot 系ユーザーをチェックして Service を名乗っているか確認しているのですが、Misskey の Ghost を除けばほとんどの Bot が Service をちゃんと名乗っているので、状況は悪化してほしくないです……。

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

現状でもBotなのにBotフラグ立ててないケースは目立つ

twista.283.cloud に認識された Bot 系ユーザーをチェックして Service を名乗っているか確認しているのですが、Misskey の Ghost を除けばほとんどの Bot が Service をちゃんと名乗っているので、状況は悪化してほしくないです……。

なるほど

@acid-chicken
Copy link
Member

Misskey の Ghost が isBot ついてないケースが散見されるのに関してはまた別で Issue 立てて議論すべき案件かも(他サーバーから迷惑がられるケースも観測しているので)。

@syuilo
Copy link
Member

syuilo commented Jan 28, 2020

Ghost に関しては設定時に自動でisBotにするようにします

@mei23
Copy link
Contributor

mei23 commented Jan 29, 2020

ん、ではMisskey上でアカウントをGroupとして設定したい場合はどうするのかしら

今のところ一般ユーザーにGroupを名乗らせるのを許可する必要はないのかなと思います

@syuilo
Copy link
Member

syuilo commented Jan 29, 2020

ん、ではMisskey上でアカウントをGroupとして設定したい場合はどうするのかしら

今のところ一般ユーザーにGroupを名乗らせるのを許可する必要はないのかなと思います

なるほど
ということはMisskeyはGroupを受け入れる予定ではあるけどこっち側からGroupを配信する予定は今のところないってことかな

@mei23
Copy link
Contributor

mei23 commented Jan 29, 2020

ということはMisskeyはGroupを受け入れる予定ではあるけどこっち側からGroupを配信する予定は今のところないってことかな

Misskey側に該当するものがない (トークのグループはすんまりマップ出来ない気がする)
のでとりあえずなしでいいのではと思います

@syuilo
Copy link
Member

syuilo commented Jan 29, 2020

現在Groupのような運用をしているアカウントも存在するのでGroupを名乗れるようにしても良いかと思ってます
既存のグループ機能についてはめいめいの言うようにAP上でのGroupとは別物として扱うのが良さそう

@syuilo
Copy link
Member

syuilo commented Jan 29, 2020

現在Groupのような運用をしているアカウントも存在する

あーこれはGroupというよりOrganizationかも

@mei23
Copy link
Contributor

mei23 commented Jan 29, 2020

isGroupとisBotだと isGroup && isBot になりうるのが気になる

Person <=> isBot=false, isGroup=false
Service <=> isBot=true, isGroup=false
Group <=> isBot=false, isGroup=true
みたいなマップになるので Person/Service/Group が流れてきたときに
両方のカラムをコミットすればとりあえず大丈夫だとおもいます

でも、そもそもActor typeでbotを識別する設計が良くない気がする。
Group で bot/非botを識別する手段がない
Group なら識別出来なくてもいいのでは?というのはあるけど
Organization でbot/非botを識別する手段がないのは困りそう。

@syuilo
Copy link
Member

syuilo commented Jan 29, 2020

Misskey上でGroupの扱いをどうするかは後回しにして、とりあえず

export const validActor = ['Person', 'Service', 'Group']; // とOrganization?

だけでもマージしてしまいたい

@tamaina
Copy link
Contributor

tamaina commented May 6, 2020

これ結局どうするんだろう

@mei23 mei23 added the 🌌Federation The Federation/ActivityPub feature label Jul 5, 2020
@mei23
Copy link
Contributor

mei23 commented Jul 5, 2020

Group Actor自体はもう扱えるようになってるので、
今このプルリクで変わるところは Bot のように Group バッジが付くとこくらい。

@noellabo
Copy link
Contributor Author

Groupバッジはそんなに重要じゃないので、このまま閉じちゃいます。
またそのうち、要件まとめてから、あらためてGroupの話しますね。

@noellabo noellabo closed this Jul 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌌Federation The Federation/ActivityPub feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants