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

ミュートしている人に向けたメンションが含まれている投稿は表示しないようにしてほしい #2690

Open
tamaina opened this issue Sep 11, 2018 · 6 comments · May be fixed by #14995
Assignees
Labels
✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR

Comments

@tamaina
Copy link
Contributor

tamaina commented Sep 11, 2018

Summary

Environment


Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

@Sayamame-beans
Copy link
Member

Sayamame-beans commented Jun 23, 2024

実装を試みています( https://github.com/Sayamame-beans/misskey/tree/mute_note_has_muting_mention )が、以下の懸念点があります。

  • ミュート対象ユーザーのメンションが含まれたノートを全て非表示にすると、ミュート対象と関係の薄い他ユーザーからの自分宛てノート/リプライの中でメンションが含まれていたような場合にも見えなくなってしまいます。
  • インスタンスミュートには適用出来なさそう。
    • メンション情報にはサーバー情報が無いため。

なお、visibleUserIdsにも同様の実装を試みてみましたが、同様の懸念から処理が不要かもしれません。

(微off-topic: 各ミュート対象ごとに何に対するミュートを行うか指定出来れば、懸念の前者は改善されそうですが… 類似: #13405)

@Sayamame-beans
Copy link
Member

Sayamame-beans commented Jun 26, 2024

isUserRelatedを呼び出している箇所のmeやuserを引数経由でisUserRelatedに渡すことで、自分宛ての場合にメンション判定を除外することが出来そう…

メモ: DBへのQueryの方の処理を書き忘れている

@Sayamame-beans
Copy link
Member

メモ: DBへのQueryの方の処理を書き忘れている

meのことを一旦考えないとすると、

.andWhere(new Brackets(qb => {

この部分に

			.andWhere(new Brackets(qb => {
				qb
					.where('note.mentions IS NULL')
					.orWhere(`NOT (note.mentions && (${ mutingQuery.getQuery() }))`)
			}))

を追加で出来そうですかね…? (動作未確認)

https://misskey.niri.la/notes/9vqodidxv6

@Sayamame-beans Sayamame-beans self-assigned this Sep 18, 2024
@Sayamame-beans
Copy link
Member

  • 通知欄にはメンションによるミュートを適用しないままに(恐らくuserMutingsCacheしか使っていないので大丈夫…なはず)
  • TLにはメンションによるミュートが適用されるように(isUserRelatedとgenerateMutedUserQueryの修正)

で概ね問題なさそうかもです
ただ、メンション一覧/DM一覧(notes/mentionエンドポイント)はgenerateMutedUserQueryを使用していそう…? あとストリーミングのときのミュート処理がどこにあるのか掴めていないです…

@samunohito
Copy link
Member

あとストリーミングのときのミュート処理がどこにあるのか掴めていないです…

ストリーミングでの通知・メンションに対するものでしたら、ここかも…?

case 'notification': {
// Ignore notifications from instances the user has muted
if (isUserFromMutedInstance(data.body, new Set<string>(this.userProfile?.mutedInstances ?? []))) return;
if (data.body.userId && this.userIdsWhoMeMuting.has(data.body.userId)) return;
if (data.body.note && data.body.note.isHidden) {
const note = await this.noteEntityService.pack(data.body.note.id, this.user, {
detail: true,
});
this.connection.cacheNote(note);
data.body.note = note;
}
break;
}
case 'mention': {
if (isInstanceMuted(data.body, new Set<string>(this.userProfile?.mutedInstances ?? []))) return;
if (this.userIdsWhoMeMuting.has(data.body.userId)) return;
if (data.body.isHidden) {
const note = await this.noteEntityService.pack(data.body.id, this.user, {
detail: true,
});
this.connection.cacheNote(note);
data.body = note;
}
break;
}

@Sayamame-beans
Copy link
Member

ふむ…
通知対象のリプライ元や引用元のノートがミュート対象のものであった場合に、通知でだけミュートされないようになってますかね…?
(ミュート対象本人からの通知でなければ通すようにする仕様と捉えた方が良さそうですかね?)

(あれ? ブロックで見えないはずの場合も貫通します? これ)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR
Projects
Development

Successfully merging a pull request may close this issue.

4 participants