diff --git a/locales/index.d.ts b/locales/index.d.ts index 4c8caf6f3d44..8b342c9f4ab1 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -10009,6 +10009,14 @@ export interface Locale extends ILocale { * 数字引用しました */ readonly "didNumberquote": string; + /** + * {user}によって解決済み + */ + readonly "resolvedBy": ParameterizedString<"user">; + /** + * リモートサーバーに転送済み + */ + readonly "forwardedReport": string; readonly "_about": { /** * taiymeについて diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index e1053eec6ea2..2da293de7b72 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2666,6 +2666,8 @@ _tms: numberquote: "数字引用する" didPakuru: "パクりました" didNumberquote: "数字引用しました" + resolvedBy: "{user}によって解決済み" + forwardedReport: "リモートサーバーに転送済み" _about: title: "taiymeについて" description: "taiymeは、Misskeyから派生したオープンソースのソフトウェアです。" diff --git a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts index 49f256d870df..1dae9b23994a 100644 --- a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts +++ b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts @@ -39,12 +39,15 @@ export class AbuseUserReportEntityService { assigneeId: report.assigneeId, reporter: this.userEntityService.pack(report.reporter ?? report.reporterId, null, { schema: 'UserDetailedNotMe', + iAmModerator: true, }), targetUser: this.userEntityService.pack(report.targetUser ?? report.targetUserId, null, { schema: 'UserDetailedNotMe', + iAmModerator: true, }), assignee: report.assigneeId ? this.userEntityService.pack(report.assignee ?? report.assigneeId, null, { schema: 'UserDetailedNotMe', + iAmModerator: true, }) : null, forwarded: report.forwarded, }); diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index b80a1ec206b4..251e19bbfcfd 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -404,11 +404,13 @@ export class UserEntityService implements OnModuleInit { userRelations?: Map, userMemos?: Map, pinNotes?: Map, + iAmModerator?: boolean, }, ): Promise> { const opts = Object.assign({ schema: 'UserLite', includeSecrets: false, + iAmModerator: false, }, options); const user = typeof src === 'object' ? src : await this.usersRepository.findOneByOrFail({ id: src }); @@ -416,7 +418,7 @@ export class UserEntityService implements OnModuleInit { const isDetailed = opts.schema !== 'UserLite'; const meId = me ? me.id : null; const isMe = meId === user.id; - const iAmModerator = me ? await this.roleService.isModerator(me as MiUser) : false; + const iAmModerator = opts.iAmModerator || (me ? await this.roleService.isModerator(me as MiUser) : false); const profile = isDetailed ? (opts.userProfile ?? await this.userProfilesRepository.findOneByOrFail({ userId: user.id })) diff --git a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts index cf3f257ca692..386ccda9743d 100644 --- a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts +++ b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts @@ -74,6 +74,10 @@ export const meta = { nullable: true, optional: true, ref: 'UserDetailedNotMe', }, + forwarded: { + type: 'boolean', + nullable: false, optional: false, + }, }, }, }, diff --git a/packages/frontend/src/components/MkAbuseReport.vue b/packages/frontend/src/components/MkAbuseReport.vue index a28e7c25592d..3df8ea9fcb41 100644 --- a/packages/frontend/src/components/MkAbuseReport.vue +++ b/packages/frontend/src/components/MkAbuseReport.vue @@ -4,37 +4,91 @@ SPDX-License-Identifier: AGPL-3.0-only -->