diff options
| author | anatawa12 <anatawa12@icloud.com> | 2024-04-17 14:23:41 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-17 14:23:41 +0900 |
| commit | e423b8ce4b28ecbe4e300fc67389e4def3761eb6 (patch) | |
| tree | 43d5e15ead542d1f0dad7dc30e0f86dc7e192535 /packages/backend/src/server/api/stream/channel.ts | |
| parent | enhance(frontend): フォローするかどうかの確認ダイアログを... (diff) | |
| download | misskey-e423b8ce4b28ecbe4e300fc67389e4def3761eb6.tar.gz misskey-e423b8ce4b28ecbe4e300fc67389e4def3761eb6.tar.bz2 misskey-e423b8ce4b28ecbe4e300fc67389e4def3761eb6.zip | |
細かいミュートの処理の修正 (#13695)
* fix: some replies are removed from global timeline
* refactor: 各チャンネルのミュートとブロックの処理をまとめる
* fix: リノートをミュートでその人のノートのリノートをミュートしていたを修正
* refactor: isPureRenotePackedを他のところでも使う
* docs(changelog): CHANGELOGを更新
* test: withReplies = falseでフォローしてる人によるリプライが流れてくる
* test: ノートミュートしているユーザーの通常ノートのリノートが流れてくる/含まれる
Diffstat (limited to 'packages/backend/src/server/api/stream/channel.ts')
| -rw-r--r-- | packages/backend/src/server/api/stream/channel.ts | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts index 44a143538b..a267d27fba 100644 --- a/packages/backend/src/server/api/stream/channel.ts +++ b/packages/backend/src/server/api/stream/channel.ts @@ -4,6 +4,10 @@ */ import { bindThis } from '@/decorators.js'; +import { isInstanceMuted } from '@/misc/is-instance-muted.js'; +import { isUserRelated } from '@/misc/is-user-related.js'; +import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js'; +import type { Packed } from '@/misc/json-schema.js'; import type Connection from './Connection.js'; /** @@ -54,6 +58,24 @@ export default abstract class Channel { return this.connection.subscriber; } + /* + * ミュートとブロックされてるを処理する + */ + protected isNoteMutedOrBlocked(note: Packed<'Note'>): boolean { + // 流れてきたNoteがインスタンスミュートしたインスタンスが関わる + if (isInstanceMuted(note, new Set<string>(this.userProfile?.mutedInstances ?? []))) return true; + + // 流れてきたNoteがミュートしているユーザーが関わる + if (isUserRelated(note, this.userIdsWhoMeMuting)) return true; + // 流れてきたNoteがブロックされているユーザーが関わる + if (isUserRelated(note, this.userIdsWhoBlockingMe)) return true; + + // 流れてきたNoteがリノートをミュートしてるユーザが行ったもの + if (isRenotePacked(note) && !isQuotePacked(note) && this.userIdsWhoMeMutingRenotes.has(note.user.id)) return true; + + return false; + } + constructor(id: string, connection: Connection) { this.id = id; this.connection = connection; |