summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream/channels/home-timeline.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/stream/channels/home-timeline.ts')
-rw-r--r--packages/backend/src/server/api/stream/channels/home-timeline.ts12
1 files changed, 8 insertions, 4 deletions
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index 46071e82fa..1c882c8d8a 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -59,11 +59,15 @@ class HomeTimelineChannel extends Channel {
if (!note.visibleUserIds!.includes(this.user!.id)) return;
}
- // 関係ない返信は除外
- if (note.reply && !this.following[note.userId]?.withReplies) {
+ if (note.reply) {
const reply = note.reply;
- // 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
- if (reply.userId !== this.user!.id && !isMe && reply.userId !== note.userId) return;
+ if (this.following[note.userId]?.withReplies) {
+ // 自分のフォローしていないユーザーの visibility: followers な投稿への返信は弾く
+ if (reply.visibility === 'followers' && !Object.hasOwn(this.following, reply.userId)) return;
+ } else {
+ // 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
+ if (reply.userId !== this.user!.id && !isMe && reply.userId !== note.userId) return;
+ }
}
if (note.renote && note.text == null && (note.fileIds == null || note.fileIds.length === 0) && !this.withRenotes) return;