feat: 通報の強化 (#14704)
* wip
* Update CHANGELOG.md
* lint
* Update types.ts
* wip
* ✌️
* Update MkAbuseReport.vue
* tweak
			
			
This commit is contained in:
		| @@ -20,8 +20,10 @@ export class AbuseReportService { | ||||
| 	constructor( | ||||
| 		@Inject(DI.abuseUserReportsRepository) | ||||
| 		private abuseUserReportsRepository: AbuseUserReportsRepository, | ||||
|  | ||||
| 		@Inject(DI.usersRepository) | ||||
| 		private usersRepository: UsersRepository, | ||||
|  | ||||
| 		private idService: IdService, | ||||
| 		private abuseReportNotificationService: AbuseReportNotificationService, | ||||
| 		private queueService: QueueService, | ||||
| @@ -77,16 +79,16 @@ export class AbuseReportService { | ||||
| 	 * - SystemWebhook | ||||
| 	 * | ||||
| 	 * @param params 通報内容. もし複数件の通報に対応した時のために、あらかじめ複数件を処理できる前提で考える | ||||
| 	 * @param operator 通報を処理したユーザ | ||||
| 	 * @param moderator 通報を処理したユーザ | ||||
| 	 * @see AbuseReportNotificationService.notify | ||||
| 	 */ | ||||
| 	@bindThis | ||||
| 	public async resolve( | ||||
| 		params: { | ||||
| 			reportId: string; | ||||
| 			forward: boolean; | ||||
| 			resolvedAs: MiAbuseUserReport['resolvedAs']; | ||||
| 		}[], | ||||
| 		operator: MiUser, | ||||
| 		moderator: MiUser, | ||||
| 	) { | ||||
| 		const paramsMap = new Map(params.map(it => [it.reportId, it])); | ||||
| 		const reports = await this.abuseUserReportsRepository.findBy({ | ||||
| @@ -99,25 +101,15 @@ export class AbuseReportService { | ||||
|  | ||||
| 			await this.abuseUserReportsRepository.update(report.id, { | ||||
| 				resolved: true, | ||||
| 				assigneeId: operator.id, | ||||
| 				forwarded: ps.forward && report.targetUserHost !== null, | ||||
| 				assigneeId: moderator.id, | ||||
| 				resolvedAs: ps.resolvedAs, | ||||
| 			}); | ||||
|  | ||||
| 			if (ps.forward && report.targetUserHost != null) { | ||||
| 				const actor = await this.instanceActorService.getInstanceActor(); | ||||
| 				const targetUser = await this.usersRepository.findOneByOrFail({ id: report.targetUserId }); | ||||
|  | ||||
| 				// eslint-disable-next-line | ||||
| 				const flag = this.apRendererService.renderFlag(actor, targetUser.uri!, report.comment); | ||||
| 				const contextAssignedFlag = this.apRendererService.addContext(flag); | ||||
| 				this.queueService.deliver(actor, contextAssignedFlag, targetUser.inbox, false); | ||||
| 			} | ||||
|  | ||||
| 			this.moderationLogService | ||||
| 				.log(operator, 'resolveAbuseReport', { | ||||
| 				.log(moderator, 'resolveAbuseReport', { | ||||
| 					reportId: report.id, | ||||
| 					report: report, | ||||
| 					forwarded: ps.forward && report.targetUserHost !== null, | ||||
| 					resolvedAs: ps.resolvedAs, | ||||
| 				}) | ||||
| 				.then(); | ||||
| 		} | ||||
| @@ -125,4 +117,58 @@ export class AbuseReportService { | ||||
| 		return this.abuseUserReportsRepository.findBy({ id: In(reports.map(it => it.id)) }) | ||||
| 			.then(reports => this.abuseReportNotificationService.notifySystemWebhook(reports, 'abuseReportResolved')); | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	public async forward( | ||||
| 		reportId: MiAbuseUserReport['id'], | ||||
| 		moderator: MiUser, | ||||
| 	) { | ||||
| 		const report = await this.abuseUserReportsRepository.findOneByOrFail({ id: reportId }); | ||||
|  | ||||
| 		if (report.targetUserHost == null) { | ||||
| 			throw new Error('The target user host is null.'); | ||||
| 		} | ||||
|  | ||||
| 		await this.abuseUserReportsRepository.update(report.id, { | ||||
| 			forwarded: true, | ||||
| 		}); | ||||
|  | ||||
| 		const actor = await this.instanceActorService.getInstanceActor(); | ||||
| 		const targetUser = await this.usersRepository.findOneByOrFail({ id: report.targetUserId }); | ||||
|  | ||||
| 		const flag = this.apRendererService.renderFlag(actor, targetUser.uri!, report.comment); | ||||
| 		const contextAssignedFlag = this.apRendererService.addContext(flag); | ||||
| 		this.queueService.deliver(actor, contextAssignedFlag, targetUser.inbox, false); | ||||
|  | ||||
| 		this.moderationLogService | ||||
| 			.log(moderator, 'forwardAbuseReport', { | ||||
| 				reportId: report.id, | ||||
| 				report: report, | ||||
| 			}) | ||||
| 			.then(); | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	public async update( | ||||
| 		reportId: MiAbuseUserReport['id'], | ||||
| 		params: { | ||||
| 			moderationNote?: MiAbuseUserReport['moderationNote']; | ||||
| 		}, | ||||
| 		moderator: MiUser, | ||||
| 	) { | ||||
| 		const report = await this.abuseUserReportsRepository.findOneByOrFail({ id: reportId }); | ||||
|  | ||||
| 		await this.abuseUserReportsRepository.update(report.id, { | ||||
| 			moderationNote: params.moderationNote, | ||||
| 		}); | ||||
|  | ||||
| 		if (params.moderationNote != null && report.moderationNote !== params.moderationNote) { | ||||
| 			this.moderationLogService.log(moderator, 'updateAbuseReportNote', { | ||||
| 				reportId: report.id, | ||||
| 				report: report, | ||||
| 				before: report.moderationNote, | ||||
| 				after: params.moderationNote, | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo