1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-14 15:45:43 +02:00

fix(backend): ノート通知で公開範囲を考慮するように (#17335)

* fix(backend): ノート通知で公開範囲を考慮するように

* refactor: remove unused imports

* Update Changelog

* Update Changelog

* fix: フォロワー限定ノートは通知

---------

Co-authored-by: lqvp <183242690+lqvp@users.noreply.github.com>
This commit is contained in:
かっこかり
2026-04-27 10:26:13 +09:00
committed by GitHub
parent 6176cca0a4
commit b45f18cd14
2 changed files with 44 additions and 1 deletions

View File

@@ -30,6 +30,8 @@
(Cherry-picked from https://github.com/lqvp/misskey-tempura/commit/3f0f4bfe923f2b3a7837017b54841598f421c6ef) (Cherry-picked from https://github.com/lqvp/misskey-tempura/commit/3f0f4bfe923f2b3a7837017b54841598f421c6ef)
- Fix: support activity with `actor` as an id string or embedded object in inbox processor and ActivityPub inbox service - Fix: support activity with `actor` as an id string or embedded object in inbox processor and ActivityPub inbox service
- Fix: コンフィグファイルに `meilisearch` の設定がある状態でほかの検索プロバイダを利用すると、UI上からリモートのートの検索ができない問題を修正 - Fix: コンフィグファイルに `meilisearch` の設定がある状態でほかの検索プロバイダを利用すると、UI上からリモートのートの検索ができない問題を修正
- Fix: ノートに関する通知で公開範囲が考慮されていない問題を修正
(Cherry-picked from https://github.com/lqvp/misskey-tempura/commit/cbce96c520a138b8bcd16890ff6f2952830fa166 originally presented in https://github.com/yojo-art/cherrypick/pull/743)
## 2026.3.2 ## 2026.3.2

View File

@@ -71,6 +71,7 @@ class NotificationManager {
constructor( constructor(
private mutingsRepository: MutingsRepository, private mutingsRepository: MutingsRepository,
private notificationService: NotificationService, private notificationService: NotificationService,
private followingsRepository: FollowingsRepository,
notifier: { id: MiUser['id']; }, notifier: { id: MiUser['id']; },
note: MiNote, note: MiNote,
) { ) {
@@ -101,7 +102,47 @@ class NotificationManager {
@bindThis @bindThis
public async notify() { public async notify() {
if (this.queue.length === 0) {
return;
}
const targetUserIds = this.queue.map(x => x.target);
let visibleUserIds: Set<string>;
switch (this.note.visibility) {
case 'public':
case 'home':
visibleUserIds = new Set(targetUserIds);
break;
case 'specified':
visibleUserIds = new Set(this.note.visibleUserIds.filter(id => targetUserIds.includes(id)));
break;
// TODO: フォロワー限定ノートにフォロワーではない人がメンションされた場合通知されるのが正しい挙動なのか確認(一部に挙動の不一致がありそう)。現状は通知されるためフィルタしない
// case 'followers': {
// const followers = await this.followingsRepository.find({
// where: {
// followeeId: this.note.userId,
// followerId: In(targetUserIds),
// isFollowerHibernated: false,
// },
// select: ['followerId'],
// });
// visibleUserIds = new Set(followers.map(f => f.followerId));
// break;
// }
default:
visibleUserIds = new Set();
break;
}
for (const x of this.queue) { for (const x of this.queue) {
if (!visibleUserIds.has(x.target)) {
continue;
}
if (x.reason === 'renote') { if (x.reason === 'renote') {
this.notificationService.createNotification(x.target, 'renote', { this.notificationService.createNotification(x.target, 'renote', {
noteId: this.note.id, noteId: this.note.id,
@@ -772,7 +813,7 @@ export class NoteCreateService implements OnApplicationShutdown {
this.webhookService.enqueueUserWebhook(user.id, 'note', { note: noteObj }); this.webhookService.enqueueUserWebhook(user.id, 'note', { note: noteObj });
const nm = new NotificationManager(this.mutingsRepository, this.notificationService, user, note); const nm = new NotificationManager(this.mutingsRepository, this.notificationService, this.followingsRepository, user, note);
await this.createMentionedEvents(mentionedUsers, note, nm); await this.createMentionedEvents(mentionedUsers, note, nm);