Skip to content

Commit

Permalink
feat: 運営のアクティビティが一定期間ない場合は通知+招待制に移行した際に通知
Browse files Browse the repository at this point in the history
  • Loading branch information
samunohito committed Oct 12, 2024
1 parent a2cd6a7 commit 3ab953b
Show file tree
Hide file tree
Showing 15 changed files with 486 additions and 37 deletions.
20 changes: 20 additions & 0 deletions locales/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9326,6 +9326,18 @@ export interface Locale extends ILocale {
* ログインがありました
*/
"login": string;
/**
* システムからの通知
*/
"fromSystem": string;
/**
* モデレーターが一定期間非アクティブになっています。{timeVariant}まで非アクティブな状態が続くと招待制に切り替わります。
*/
"adminInactiveModeratorsWarning": ParameterizedString<"timeVariant">;
/**
* モデレーターが一定期間非アクティブだったため、システムにより招待制へと変更されました。
*/
"adminInactiveModeratorsInvitationOnlyChanged": string;
"_types": {
/**
* すべて
Expand Down Expand Up @@ -9633,6 +9645,14 @@ export interface Locale extends ILocale {
* ユーザーが作成されたとき
*/
"userCreated": string;
/**
* モデレーターが一定期間非アクティブになったとき
*/
"inactiveModeratorsWarning": string;
/**
* モデレーターが一定期間非アクティブだったため、システムにより招待制へと変更されたとき
*/
"inactiveModeratorsInvitationOnlyChanged": string;
};
/**
* Webhookを削除しますか?
Expand Down
5 changes: 5 additions & 0 deletions locales/ja-JP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2462,6 +2462,9 @@ _notification:
flushNotification: "通知の履歴をリセットする"
exportOfXCompleted: "{x}のエクスポートが完了しました"
login: "ログインがありました"
fromSystem: "システムからの通知"
adminInactiveModeratorsWarning: "モデレーターが一定期間非アクティブになっています。{timeVariant}まで非アクティブな状態が続くと招待制に切り替わります。"
adminInactiveModeratorsInvitationOnlyChanged: "モデレーターが一定期間非アクティブだったため、システムにより招待制へと変更されました。"

_types:
all: "すべて"
Expand Down Expand Up @@ -2552,6 +2555,8 @@ _webhookSettings:
abuseReport: "ユーザーから通報があったとき"
abuseReportResolved: "ユーザーからの通報を処理したとき"
userCreated: "ユーザーが作成されたとき"
inactiveModeratorsWarning: "モデレーターが一定期間非アクティブになったとき"
inactiveModeratorsInvitationOnlyChanged: "モデレーターが一定期間非アクティブだったため、システムにより招待制へと変更されたとき"
deleteConfirm: "Webhookを削除しますか?"
testRemarks: "スイッチの右にあるボタンをクリックするとダミーのデータを使用したテスト用Webhookを送信できます。"

Expand Down
17 changes: 17 additions & 0 deletions packages/backend/src/core/WebhookTestService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { Packed } from '@/misc/json-schema.js';
import { type WebhookEventTypes } from '@/models/Webhook.js';
import { UserWebhookService } from '@/core/UserWebhookService.js';
import { QueueService } from '@/core/QueueService.js';
import { ModeratorInactivityRemainingTime } from '@/queue/processors/CheckModeratorsActivityProcessorService.js';

const oneDayMillis = 24 * 60 * 60 * 1000;

Expand Down Expand Up @@ -446,6 +447,22 @@ export class WebhookTestService {
send(toPackedUserLite(dummyUser1));
break;
}
case 'inactiveModeratorsWarning': {
const dummyTime: ModeratorInactivityRemainingTime = {
time: 100000,
asDays: 1,
asHours: 24,
};

send({
remainingTime: dummyTime,
});
break;
}
case 'inactiveModeratorsInvitationOnlyChanged': {
send({});
break;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export class NotificationEntityService implements OnModuleInit {
async #packInternal <T extends MiNotification | MiGroupedNotification> (
src: T,
meId: MiUser['id'],

options: {
checkValidNotifier?: boolean;
},
Expand Down Expand Up @@ -174,6 +174,9 @@ export class NotificationEntityService implements OnModuleInit {
header: notification.customHeader,
icon: notification.customIcon,
} : {}),
...(notification.type === 'adminInactiveModeratorsWarning' ? {
remainingTime: notification.remainingTime,
} : {}),
});
}

Expand Down Expand Up @@ -236,7 +239,7 @@ export class NotificationEntityService implements OnModuleInit {
public async pack(
src: MiNotification | MiGroupedNotification,
meId: MiUser['id'],

options: {
checkValidNotifier?: boolean;
},
Expand Down
10 changes: 10 additions & 0 deletions packages/backend/src/models/Notification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*/

import { userExportableEntities } from '@/types.js';
import { ModeratorInactivityRemainingTime } from '@/queue/processors/CheckModeratorsActivityProcessorService.js';
import { MiUser } from './User.js';
import { MiNote } from './Note.js';
import { MiAccessToken } from './AccessToken.js';
Expand Down Expand Up @@ -116,6 +117,15 @@ export type MiNotification = {
* アプリ通知のアプリ(のトークン)
*/
appAccessTokenId: MiAccessToken['id'] | null;
} | {
type: 'adminInactiveModeratorsWarning';
id: string;
createdAt: string;
remainingTime: ModeratorInactivityRemainingTime;
} | {
type: 'adminInactiveModeratorsInvitationOnlyChanged';
id: string;
createdAt: string;
} | {
type: 'test';
id: string;
Expand Down
4 changes: 4 additions & 0 deletions packages/backend/src/models/SystemWebhook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ export const systemWebhookEventTypes = [
'abuseReportResolved',
// ユーザが作成された時
'userCreated',
// モデレータが一定期間不在である警告
'inactiveModeratorsWarning',
// モデレータが一定期間不在のためシステムにより招待制へと変更された
'inactiveModeratorsInvitationOnlyChanged',
] as const;
export type SystemWebhookEventType = typeof systemWebhookEventTypes[number];

Expand Down
37 changes: 37 additions & 0 deletions packages/backend/src/models/json-schema/notification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,43 @@ export const packedNotificationSchema = {
},
},
},
}, {
type: 'object',
properties: {
...baseSchema.properties,
type: {
type: 'string',
optional: false, nullable: false,
enum: ['adminInactiveModeratorsWarning'],
},
remainingTime: {
type: 'object',
properties: {
time: {
type: 'number',
optional: false, nullable: false,
},
asDays: {
type: 'number',
optional: false, nullable: false,
},
asHours: {
type: 'number',
optional: false, nullable: false,
},
},
},
},
}, {
type: 'object',
properties: {
...baseSchema.properties,
type: {
type: 'string',
optional: false, nullable: false,
enum: ['adminInactiveModeratorsInvitationOnlyChanged'],
},
},
}, {
type: 'object',
properties: {
Expand Down
Loading

0 comments on commit 3ab953b

Please sign in to comment.