diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index f0ca882d0..cc4a354aa 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -161,8 +161,9 @@ export function apiAccountMastodon(router: Router): void { } const userId = convertId(ctx.params.id, IdType.IceshrimpId); + const query = await getUser(userId); const args = normalizeUrlQuery(convertTimelinesArgsId(argsToBools(limitToInt(ctx.query)))); - const tl = await UserHelpers.getUserStatuses(userId, user, args.max_id, args.since_id, args.min_id, args.limit, args.only_media, args.exclude_replies, args.exclude_reblogs, args.pinned, args.tagged) + const tl = await UserHelpers.getUserStatuses(query, user, args.max_id, args.since_id, args.min_id, args.limit, args.only_media, args.exclude_replies, args.exclude_reblogs, args.pinned, args.tagged) .then(n => NoteConverter.encodeMany(n, user)); ctx.body = tl.map(s => convertStatus(s)); diff --git a/packages/backend/src/server/api/mastodon/helpers/user.ts b/packages/backend/src/server/api/mastodon/helpers/user.ts index 6269338b3..b02d74e19 100644 --- a/packages/backend/src/server/api/mastodon/helpers/user.ts +++ b/packages/backend/src/server/api/mastodon/helpers/user.ts @@ -1,4 +1,5 @@ import { Note } from "@/models/entities/note.js"; +import { User } from "@/models/entities/user.js"; import { ILocalUser } from "@/models/entities/user.js"; import { Followings, Notes } from "@/models/index.js"; import { makePaginationQuery } from "@/server/api/common/make-pagination-query.js"; @@ -16,7 +17,7 @@ import { meta } from "@/server/api/endpoints/notes/global-timeline.js"; import { NoteHelpers } from "@/server/api/mastodon/helpers/note.js"; export class UserHelpers { - public static async getUserStatuses(userId: string, localUser: ILocalUser | null, maxId: string | undefined, sinceId: string | undefined, minId: string | undefined, limit: number = 20, onlyMedia: boolean = false, excludeReplies: boolean = false, excludeReblogs: boolean = false, pinned: boolean = false, tagged: string | undefined): Promise { + public static async getUserStatuses(user: User, localUser: ILocalUser | null, maxId: string | undefined, sinceId: string | undefined, minId: string | undefined, limit: number = 20, onlyMedia: boolean = false, excludeReplies: boolean = false, excludeReblogs: boolean = false, pinned: boolean = false, tagged: string | undefined): Promise { if (limit > 40) limit = 40; if (pinned) { @@ -35,7 +36,7 @@ export class UserHelpers { sinceId ?? minId, maxId, ) - .andWhere("note.userId = :userId", { userId }); + .andWhere("note.userId = :userId", { userId: user.id }); if (excludeReblogs) query.andWhere("(note.renoteId IS NOT NULL) OR (note.text IS NOT NULL)"); @@ -52,13 +53,12 @@ export class UserHelpers { .leftJoinAndSelect("renoteUser.avatar", "renoteUserAvatar") .leftJoinAndSelect("renoteUser.banner", "renoteUserBanner"); + //FIXME this doesn't exclude replies to your own reply to someone else's post generateRepliesQuery(query, !excludeReplies, localUser); generateVisibilityQuery(query, localUser); if (localUser) { - generateMutedUserQuery(query, localUser); - generateMutedNoteQuery(query, localUser); + generateMutedUserQuery(query, localUser, user); generateBlockedUserQuery(query, localUser); - generateMutedUserRenotesQueryForNotes(query, localUser); } if (onlyMedia) query.andWhere("note.fileIds != '{}'");