import { publishMainStream } from "../stream.js"; import { Mutings, NoteThreadMutings, NoteUnreads } from "../../models/index.js"; import { genId } from "../../misc/gen-id.js"; export async function insertNoteUnread(userId, note, params) { //#region ミュートしているなら無視 // TODO: 現在の仕様ではChannelにミュートは適用されないのでよしなにケアする const mute = await Mutings.findBy({ muterId: userId }); if (mute.map((m)=>m.muteeId).includes(note.userId)) return; //#endregion // スレッドミュート const threadMute = await NoteThreadMutings.findOneBy({ userId: userId, threadId: note.threadId || note.id }); if (threadMute) return; const unread = { id: genId(), noteId: note.id, userId: userId, isSpecified: params.isSpecified, isMentioned: params.isMentioned, noteChannelId: note.channelId, noteUserId: note.userId }; await NoteUnreads.insert(unread); // 2秒経っても既読にならなかったら「未読の投稿がありますよ」イベントを発行する setTimeout(async ()=>{ const exist = await NoteUnreads.exist({ where: { id: unread.id } }); if (!exist) return; if (params.isMentioned) { publishMainStream(userId, "unreadMention", note.id); } if (params.isSpecified) { publishMainStream(userId, "unreadSpecifiedNote", note.id); } if (note.channelId) { publishMainStream(userId, "unreadChannel", note.id); } }, 2000); }