diff --git a/migration/1706638834267-appendHashtag.ts b/migration/1706638834267-appendHashtag.ts new file mode 100644 index 0000000..7441d9b --- /dev/null +++ b/migration/1706638834267-appendHashtag.ts @@ -0,0 +1,13 @@ +import {MigrationInterface, QueryRunner} from 'typeorm'; + +export class appendHashtag1706638834267 implements MigrationInterface { + name = 'appendHashtag1706638834267'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query('ALTER TABLE "user" ADD "appendHashtag" boolean NOT NULL DEFAULT true'); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query('ALTER TABLE "user" DROP COLUMN "appendHashtag"'); + } +} diff --git a/src/backend/controllers/body/user-setting.ts b/src/backend/controllers/body/user-setting.ts index 285c8d1..dc2881e 100644 --- a/src/backend/controllers/body/user-setting.ts +++ b/src/backend/controllers/body/user-setting.ts @@ -22,4 +22,7 @@ export class UserSetting { @IsOptional() useRanking?: boolean; + + @IsOptional() + appendHashtag?: boolean; } diff --git a/src/backend/models/entities/user.ts b/src/backend/models/entities/user.ts index f4eadc3..a882195 100644 --- a/src/backend/models/entities/user.ts +++ b/src/backend/models/entities/user.ts @@ -99,6 +99,12 @@ export class User implements IUser { }) public useRanking: boolean; + @Column({ + type: 'boolean', + default: true, + }) + public appendHashtag: boolean; + @Column({ type: 'boolean', default: false, diff --git a/src/common/functions/format.ts b/src/common/functions/format.ts index 1932e2d..a74d113 100644 --- a/src/common/functions/format.ts +++ b/src/common/functions/format.ts @@ -42,8 +42,12 @@ export const format = (user: IUser, count: Count): string => { ...getDelta(user, count), }; const template = user.template || defaultTemplate; - return template.replace(variableRegex, (m, name) => { + let result = template.replace(variableRegex, (m, name) => { const v = variables[name]; return !v ? m : typeof v === 'function' ? v(score, user) : v; - }) + '\n\n#misshaialert'; + }); + if (user.appendHashtag) { + result = result + '\n\n#misshaialert' + } + return result; }; diff --git a/src/common/types/user.ts b/src/common/types/user.ts index 710c2bb..b48caae 100644 --- a/src/common/types/user.ts +++ b/src/common/types/user.ts @@ -21,5 +21,6 @@ export interface IUser { isAdmin?: boolean; tokenVersion: number; useRanking: boolean; + appendHashtag: boolean; } diff --git a/src/frontend/pages/apps/misshai.tsx b/src/frontend/pages/apps/misshai.tsx index 1da8695..9e32cc1 100644 --- a/src/frontend/pages/apps/misshai.tsx +++ b/src/frontend/pages/apps/misshai.tsx @@ -60,6 +60,7 @@ export const MisshaiPage: React.VFC = () => { remoteFollowersOnly: data?.remoteFollowersOnly ?? false, template: data?.template ?? null, useRanking: data?.useRanking ?? false, + appendHashtag: data?.appendHashtag ?? true, }); const templateTextarea = useRef(null); @@ -244,6 +245,12 @@ export const MisshaiPage: React.VFC = () => { updateSetting({ useRanking: e.target.checked }); }}/> {t('_missHai.useRanking')} + +