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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user