diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index fe672c16ef..59bf28d5a6 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -935,6 +935,7 @@ moveFromLabel: "引っ越し元のアカウント:"
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@instance.com"
migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用することはできません。\nまた、引っ越し先のアカウントでエイリアスを作成したことを確認してください。"
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
+license: "ライセンス"
_sensitiveMediaDetection:
description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。"
diff --git a/packages/backend/migration/1678945242650-add-props-for-custom-emoji.js b/packages/backend/migration/1678945242650-add-props-for-custom-emoji.js
new file mode 100644
index 0000000000..656a921770
--- /dev/null
+++ b/packages/backend/migration/1678945242650-add-props-for-custom-emoji.js
@@ -0,0 +1,11 @@
+export class addPropsForCustomEmoji1678945242650 {
+ name = 'addPropsForCustomEmoji1678945242650'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "emoji" ADD "license" character varying(1024)`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "emoji" DROP COLUMN "license"`);
+ }
+}
diff --git a/packages/backend/src/models/entities/emoji.ts b/packages/backend/src/models/entities/emoji.ts
index f251de8973..2315686968 100644
--- a/packages/backend/src/models/entities/emoji.ts
+++ b/packages/backend/src/models/entities/emoji.ts
@@ -55,4 +55,9 @@ export class Emoji {
array: true, length: 128, default: '{}',
})
public aliases: string[];
+
+ @Column('varchar', {
+ length: 1024, nullable: true,
+ })
+ public license: string | null;
}
diff --git a/packages/backend/src/models/repositories/emoji.ts b/packages/backend/src/models/repositories/emoji.ts
index e868fe94fe..6eabfe9558 100644
--- a/packages/backend/src/models/repositories/emoji.ts
+++ b/packages/backend/src/models/repositories/emoji.ts
@@ -15,6 +15,7 @@ export const EmojiRepository = db.getRepository(Emoji).extend({
host: emoji.host,
// || emoji.originalUrl してるのは後方互換性のため
url: emoji.publicUrl || emoji.originalUrl,
+ license: emoji.license,
};
},
diff --git a/packages/backend/src/models/schema/emoji.ts b/packages/backend/src/models/schema/emoji.ts
index 1e1dab8689..8994381b31 100644
--- a/packages/backend/src/models/schema/emoji.ts
+++ b/packages/backend/src/models/schema/emoji.ts
@@ -40,5 +40,10 @@ export const packedEmojiSchema = {
optional: false,
nullable: false,
},
+ license: {
+ type: "string",
+ optional: false,
+ nullable: true,
+ },
},
} as const;
diff --git a/packages/backend/src/queue/processors/db/import-custom-emojis.ts b/packages/backend/src/queue/processors/db/import-custom-emojis.ts
index 45ab5ea9a1..373a3a2daf 100644
--- a/packages/backend/src/queue/processors/db/import-custom-emojis.ts
+++ b/packages/backend/src/queue/processors/db/import-custom-emojis.ts
@@ -75,6 +75,7 @@ export async function importCustomEmojis(
originalUrl: driveFile.url,
publicUrl: driveFile.webpublicUrl ?? driveFile.url,
type: driveFile.webpublicType ?? driveFile.type,
+ license: emojiInfo.license,
}).then((x) => Emojis.findOneByOrFail(x.identifiers[0]));
}
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
index 601d754a0d..bfc025834f 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
@@ -49,6 +49,7 @@ export default define(meta, paramDef, async (ps, me) => {
originalUrl: file.url,
publicUrl: file.webpublicUrl ?? file.url,
type: file.webpublicType ?? file.type,
+ license: null,
}).then((x) => Emojis.findOneByOrFail(x.identifiers[0]));
await db.queryResultCache!.remove(["meta_emojis"]);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
index 4a7f2bc611..951158f7d4 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
@@ -73,6 +73,7 @@ export default define(meta, paramDef, async (ps, me) => {
originalUrl: driveFile.url,
publicUrl: driveFile.webpublicUrl ?? driveFile.url,
type: driveFile.webpublicType ?? driveFile.type,
+ license: emoji.license,
}).then((x) => Emojis.findOneByOrFail(x.identifiers[0]));
await db.queryResultCache!.remove(["meta_emojis"]);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
index 63f60bc991..fae986dd96 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
@@ -55,6 +55,11 @@ export const meta = {
optional: false,
nullable: false,
},
+ license: {
+ type: "string",
+ optional: false,
+ nullable: true,
+ },
},
},
},
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
index bc4f1d29fa..aa49f14803 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
@@ -55,6 +55,11 @@ export const meta = {
optional: false,
nullable: false,
},
+ license: {
+ type: "string",
+ optional: false,
+ nullable: true,
+ },
},
},
},
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
index 3f7f6639f5..9e2e854760 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
@@ -34,6 +34,10 @@ export const paramDef = {
type: "string",
},
},
+ license: {
+ type: "string",
+ nullable: true,
+ },
},
required: ["id", "name", "aliases"],
} as const;
@@ -48,6 +52,7 @@ export default define(meta, paramDef, async (ps) => {
name: ps.name,
category: ps.category,
aliases: ps.aliases,
+ license: ps.license,
});
await db.queryResultCache!.remove(["meta_emojis"]);
diff --git a/packages/client/src/pages/admin/emoji-edit-dialog.vue b/packages/client/src/pages/admin/emoji-edit-dialog.vue
index b605541da3..d8e7d9667c 100644
--- a/packages/client/src/pages/admin/emoji-edit-dialog.vue
+++ b/packages/client/src/pages/admin/emoji-edit-dialog.vue
@@ -22,6 +22,9 @@
{{ i18n.ts.tags }}
{{ i18n.ts.setMultipleBySeparatingWithSpace }}
+
+ {{ i18n.ts.license }}
+
{{ i18n.ts.delete }}
@@ -47,6 +50,7 @@ let name: string = $ref(props.emoji.name);
let category: string = $ref(props.emoji.category);
let aliases: string = $ref(props.emoji.aliases.join(' '));
let categories: string[] = $ref(emojiCategories);
+let license: string = $ref(props.emoji.license ?? '');
const emit = defineEmits<{
(ev: 'done', v: { deleted?: boolean, updated?: any }): void,
@@ -63,6 +67,7 @@ async function update() {
name,
category,
aliases: aliases.split(' '),
+ license: license === '' ? null : license,
});
emit('done', {
@@ -71,6 +76,7 @@ async function update() {
name,
category,
aliases: aliases.split(' '),
+ license: license === '' ? null : license,
},
});