fix
This commit is contained in:
parent
346074c14f
commit
3e5b42ba0b
|
@ -46,9 +46,14 @@ export class CheckModeratorsActivityProcessorService {
|
||||||
if (isModeratorsInactive) {
|
if (isModeratorsInactive) {
|
||||||
this.logger.warn(`The moderator has been inactive for ${MODERATOR_INACTIVITY_LIMIT_DAYS} days. We will move to invitation only.`);
|
this.logger.warn(`The moderator has been inactive for ${MODERATOR_INACTIVITY_LIMIT_DAYS} days. We will move to invitation only.`);
|
||||||
await this.changeToInvitationOnly();
|
await this.changeToInvitationOnly();
|
||||||
|
|
||||||
|
// TODO: モデレータに通知メール+Misskey通知
|
||||||
|
// TODO: SystemWebhook通知
|
||||||
} else {
|
} else {
|
||||||
if (inactivityLimitCountdown <= 2) {
|
if (inactivityLimitCountdown <= 2) {
|
||||||
this.logger.warn(`A moderator has been inactive for a period of time. If you are inactive for an additional ${inactivityLimitCountdown} days, it will switch to invitation only.`);
|
this.logger.warn(`A moderator has been inactive for a period of time. If you are inactive for an additional ${inactivityLimitCountdown} days, it will switch to invitation only.`);
|
||||||
|
|
||||||
|
// TODO: 警告メール
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +72,7 @@ export class CheckModeratorsActivityProcessorService {
|
||||||
*
|
*
|
||||||
* #### パターン①
|
* #### パターン①
|
||||||
* - モデレータA: lastActiveDate = 2022-01-20 00:00:00 ※アウト
|
* - モデレータA: lastActiveDate = 2022-01-20 00:00:00 ※アウト
|
||||||
* - モデレータB: lastActiveDate = 2022-01-23 12:00:00 ※セーフ(ギリギリ残り0日)
|
* - モデレータB: lastActiveDate = 2022-01-23 12:00:00 ※セーフ(判定基準と同値なのでギリギリ残り0日)
|
||||||
* - モデレータC: lastActiveDate = 2022-01-23 11:59:59 ※アウト(残り-1日)
|
* - モデレータC: lastActiveDate = 2022-01-23 11:59:59 ※アウト(残り-1日)
|
||||||
* - モデレータD: lastActiveDate = null
|
* - モデレータD: lastActiveDate = null
|
||||||
*
|
*
|
||||||
|
@ -77,7 +82,7 @@ export class CheckModeratorsActivityProcessorService {
|
||||||
* - モデレータA: lastActiveDate = 2022-01-20 00:00:00 ※アウト
|
* - モデレータA: lastActiveDate = 2022-01-20 00:00:00 ※アウト
|
||||||
* - モデレータB: lastActiveDate = 2022-01-22 12:00:00 ※アウト(残り-1日)
|
* - モデレータB: lastActiveDate = 2022-01-22 12:00:00 ※アウト(残り-1日)
|
||||||
* - モデレータC: lastActiveDate = 2022-01-23 11:59:59 ※アウト(残り-1日)
|
* - モデレータC: lastActiveDate = 2022-01-23 11:59:59 ※アウト(残り-1日)
|
||||||
* - モデレータC: lastActiveDate = null
|
* - モデレータD: lastActiveDate = null
|
||||||
*
|
*
|
||||||
* この場合、モデレータA, B, Cのアクティビティは判定基準日よりも古いため、モデレーターが不在と判断される。
|
* この場合、モデレータA, B, Cのアクティビティは判定基準日よりも古いため、モデレーターが不在と判断される。
|
||||||
*/
|
*/
|
||||||
|
@ -87,26 +92,29 @@ export class CheckModeratorsActivityProcessorService {
|
||||||
const inactivePeriod = new Date(today);
|
const inactivePeriod = new Date(today);
|
||||||
inactivePeriod.setDate(today.getDate() - MODERATOR_INACTIVITY_LIMIT_DAYS);
|
inactivePeriod.setDate(today.getDate() - MODERATOR_INACTIVITY_LIMIT_DAYS);
|
||||||
|
|
||||||
// TODO: モデレーター以外にも特別な権限を持つユーザーがいる場合は考慮する
|
const moderators = await this.fetchModerators();
|
||||||
const moderators = await this.roleService.getModerators({
|
const inactiveModerators = moderators
|
||||||
includeAdmins: true,
|
.filter(it => it.lastActiveDate != null && it.lastActiveDate.getTime() < inactivePeriod.getTime());
|
||||||
includeRoot: true,
|
|
||||||
excludeExpire: true,
|
|
||||||
});
|
|
||||||
const inactiveModeratorCount = moderators
|
|
||||||
.map(it => it.lastActiveDate)
|
|
||||||
.filter(it => it != null)
|
|
||||||
.filter(it => it.getTime() < inactivePeriod.getTime())
|
|
||||||
.length;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isModeratorsInactive: inactiveModeratorCount !== moderators.length,
|
isModeratorsInactive: inactiveModerators.length !== moderators.length,
|
||||||
|
inactiveModerators,
|
||||||
inactivityLimitCountdown: MODERATOR_INACTIVITY_LIMIT_DAYS - Math.floor((today.getTime() - inactivePeriod.getTime()) / ONE_DAY_MILLI_SEC),
|
inactivityLimitCountdown: MODERATOR_INACTIVITY_LIMIT_DAYS - Math.floor((today.getTime() - inactivePeriod.getTime()) / ONE_DAY_MILLI_SEC),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async changeToInvitationOnly() {
|
private async changeToInvitationOnly() {
|
||||||
await this.metaService.update({ disableRegistration: true });
|
await this.metaService.update({ disableRegistration: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
private async fetchModerators() {
|
||||||
|
// TODO: モデレーター以外にも特別な権限を持つユーザーがいる場合は考慮する
|
||||||
|
return this.roleService.getModerators({
|
||||||
|
includeAdmins: true,
|
||||||
|
includeRoot: true,
|
||||||
|
excludeExpire: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue