diff --git a/src/misc/should-mute-this-note.ts b/src/misc/should-mute-this-note.ts new file mode 100644 index 000000000..c818115a3 --- /dev/null +++ b/src/misc/should-mute-this-note.ts @@ -0,0 +1,15 @@ +export default function(note: any, mutedUserIds: string[]): boolean { + if (mutedUserIds.indexOf(note.userId) != -1) { + return true; + } + + if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { + return true; + } + + if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { + return true; + } + + return false; +} diff --git a/src/server/api/stream/global-timeline.ts b/src/server/api/stream/global-timeline.ts index 4786450cb..03852fb18 100644 --- a/src/server/api/stream/global-timeline.ts +++ b/src/server/api/stream/global-timeline.ts @@ -3,6 +3,7 @@ import Xev from 'xev'; import { IUser } from '../../../models/user'; import Mute from '../../../models/mute'; +import shouldMuteThisNote from '../../../misc/should-mute-this-note'; export default async function( request: websocket.request, @@ -15,17 +16,8 @@ export default async function( // Subscribe stream subscriber.on('global-timeline', async note => { - //#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する - if (mutedUserIds.indexOf(note.userId) != -1) { - return; - } - if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { - return; - } - if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { - return; - } - //#endregion + // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (shouldMuteThisNote(note, mutedUserIds)) return; connection.send(JSON.stringify({ type: 'note', diff --git a/src/server/api/stream/hashtag.ts b/src/server/api/stream/hashtag.ts index db2806e79..54da4f9ad 100644 --- a/src/server/api/stream/hashtag.ts +++ b/src/server/api/stream/hashtag.ts @@ -4,6 +4,7 @@ import Xev from 'xev'; import { IUser } from '../../../models/user'; import Mute from '../../../models/mute'; import { pack } from '../../../models/note'; +import shouldMuteThisNote from '../../../misc/should-mute-this-note'; export default async function( request: websocket.request, @@ -28,17 +29,8 @@ export default async function( }); } - //#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する - if (mutedUserIds.indexOf(note.userId) != -1) { - return; - } - if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { - return; - } - if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { - return; - } - //#endregion + // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (shouldMuteThisNote(note, mutedUserIds)) return; connection.send(JSON.stringify({ type: 'note', diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts index 5f3b6744b..f1fced42d 100644 --- a/src/server/api/stream/home.ts +++ b/src/server/api/stream/home.ts @@ -8,6 +8,7 @@ import { pack as packNote, pack } from '../../../models/note'; import readNotification from '../common/read-notification'; import call from '../call'; import { IApp } from '../../../models/app'; +import shouldMuteThisNote from '../../../misc/should-mute-this-note'; const log = debug('misskey'); @@ -45,15 +46,7 @@ export default async function( //#region 流れてきたメッセージがミュートしているユーザーが関わるものだったら無視する if (x.type == 'note') { - if (mutedUserIds.includes(x.body.userId)) { - return; - } - if (x.body.reply != null && mutedUserIds.includes(x.body.reply.userId)) { - return; - } - if (x.body.renote != null && mutedUserIds.includes(x.body.renote.userId)) { - return; - } + if (shouldMuteThisNote(x.body, mutedUserIds)) return; } else if (x.type == 'notification') { if (mutedUserIds.includes(x.body.userId)) { return; diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts index d0dae9b0d..045b82278 100644 --- a/src/server/api/stream/hybrid-timeline.ts +++ b/src/server/api/stream/hybrid-timeline.ts @@ -4,6 +4,7 @@ import Xev from 'xev'; import { IUser } from '../../../models/user'; import Mute from '../../../models/mute'; import { pack } from '../../../models/note'; +import shouldMuteThisNote from '../../../misc/should-mute-this-note'; export default async function( request: websocket.request, @@ -26,17 +27,8 @@ export default async function( }); } - //#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する - if (mutedUserIds.indexOf(note.userId) != -1) { - return; - } - if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { - return; - } - if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { - return; - } - //#endregion + // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (shouldMuteThisNote(note, mutedUserIds)) return; connection.send(JSON.stringify({ type: 'note', diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts index e21c071ba..ae054a5f9 100644 --- a/src/server/api/stream/local-timeline.ts +++ b/src/server/api/stream/local-timeline.ts @@ -4,6 +4,7 @@ import Xev from 'xev'; import { IUser } from '../../../models/user'; import Mute from '../../../models/mute'; import { pack } from '../../../models/note'; +import shouldMuteThisNote from '../../../misc/should-mute-this-note'; export default async function( request: websocket.request, @@ -23,17 +24,8 @@ export default async function( }); } - //#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する - if (mutedUserIds.indexOf(note.userId) != -1) { - return; - } - if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) { - return; - } - if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) { - return; - } - //#endregion + // 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する + if (shouldMuteThisNote(note, mutedUserIds)) return; connection.send(JSON.stringify({ type: 'note',