| @@ -39,20 +39,22 @@ class HomeTimelineChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		const isMe = this.user!.id === note.userId; | ||||
|  | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (note.channelId) { | ||||
| 			if (!this.followingChannels.has(note.channelId)) return; | ||||
| 		} else { | ||||
| 			// その投稿のユーザーをフォローしていなかったら弾く | ||||
| 			if ((this.user!.id !== note.userId) && !Object.hasOwn(this.following, note.userId)) return; | ||||
| 			if (!isMe && !Object.hasOwn(this.following, note.userId)) return; | ||||
| 		} | ||||
|  | ||||
| 		// Ignore notes from instances the user has muted | ||||
| 		if (isInstanceMuted(note, new Set<string>(this.userProfile!.mutedInstances))) return; | ||||
|  | ||||
| 		if (note.visibility === 'followers') { | ||||
| 			if (!Object.hasOwn(this.following, note.userId)) return; | ||||
| 			if (!isMe && !Object.hasOwn(this.following, note.userId)) return; | ||||
| 		} else if (note.visibility === 'specified') { | ||||
| 			if (!note.visibleUserIds!.includes(this.user!.id)) return; | ||||
| 		} | ||||
| @@ -61,7 +63,7 @@ class HomeTimelineChannel extends Channel { | ||||
| 		if (note.reply && !this.following[note.userId]?.withReplies) { | ||||
| 			const reply = note.reply; | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合 | ||||
| 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return; | ||||
| 			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; | ||||
|   | ||||
| @@ -49,6 +49,8 @@ class HybridTimelineChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		const isMe = this.user!.id === note.userId; | ||||
|  | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		// チャンネルの投稿ではなく、自分自身の投稿 または | ||||
| @@ -56,14 +58,14 @@ class HybridTimelineChannel extends Channel { | ||||
| 		// チャンネルの投稿ではなく、全体公開のローカルの投稿 または | ||||
| 		// フォローしているチャンネルの投稿 の場合だけ | ||||
| 		if (!( | ||||
| 			(note.channelId == null && this.user!.id === note.userId) || | ||||
| 			(note.channelId == null && isMe) || | ||||
| 			(note.channelId == null && Object.hasOwn(this.following, note.userId)) || | ||||
| 			(note.channelId == null && (note.user.host == null && note.visibility === 'public')) || | ||||
| 			(note.channelId != null && this.followingChannels.has(note.channelId)) | ||||
| 		)) return; | ||||
|  | ||||
| 		if (note.visibility === 'followers') { | ||||
| 			if (!Object.hasOwn(this.following, note.userId)) return; | ||||
| 			if (!isMe && !Object.hasOwn(this.following, note.userId)) return; | ||||
| 		} else if (note.visibility === 'specified') { | ||||
| 			if (!note.visibleUserIds!.includes(this.user!.id)) return; | ||||
| 		} | ||||
| @@ -75,7 +77,7 @@ class HybridTimelineChannel extends Channel { | ||||
| 		if (note.reply && !this.following[note.userId]?.withReplies && !this.withReplies) { | ||||
| 			const reply = note.reply; | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合 | ||||
| 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return; | ||||
| 			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; | ||||
|   | ||||
| @@ -78,12 +78,14 @@ class UserListChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		const isMe = this.user!.id === note.userId; | ||||
|  | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (!Object.hasOwn(this.membershipsMap, note.userId)) return; | ||||
|  | ||||
| 		if (note.visibility === 'followers') { | ||||
| 			if (!Object.hasOwn(this.following, note.userId)) return; | ||||
| 			if (!isMe && !Object.hasOwn(this.following, note.userId)) return; | ||||
| 		} else if (note.visibility === 'specified') { | ||||
| 			if (!note.visibleUserIds!.includes(this.user!.id)) return; | ||||
| 		} | ||||
| @@ -92,7 +94,7 @@ class UserListChannel extends Channel { | ||||
| 		if (note.reply && !this.membershipsMap[note.userId]?.withReplies) { | ||||
| 			const reply = note.reply; | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合 | ||||
| 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return; | ||||
| 			if (reply.userId !== this.user!.id && !isMe && reply.userId !== note.userId) return; | ||||
| 		} | ||||
|  | ||||
| 		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo