From 2a9ddf2bc8674858136d2f9bd7fa85ec9e8e022a Mon Sep 17 00:00:00 2001 From: mattyatea Date: Sat, 23 Dec 2023 10:44:01 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E5=88=86=E5=8B=95=E3=81=8F=E3=81=A8?= =?UTF-8?q?=E6=80=9D=E3=81=86=E3=81=8B=E3=82=89=E3=83=AA=E3=83=AA=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=97=E3=82=88=E3=81=86=E3=81=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/index.d.ts | 4 +- package.json | 2 +- .../backend/1703294653915-requestemoji.js | 11 + packages/backend/src/models/Meta.ts | 5 + .../api/endpoints/admin/emoji/add-draft.ts | 129 ----------- .../api/endpoints/admin/emoji/add-request.ts | 84 +++++-- .../src/server/api/endpoints/admin/meta.ts | 1 + .../server/api/endpoints/admin/update-meta.ts | 4 + .../src/components/MkCustomEmojiEditDraft.vue | 214 ------------------ .../src/components/MkCustomEmojiEditLocal.vue | 11 +- .../src/components/MkEmojiEditDialog.vue | 80 ++++--- .../src/components/MkNoteDetailed.vue | 1 - packages/frontend/src/components/MkSwitch.vue | 2 - packages/frontend/src/pages/about.emojis.vue | 34 +-- .../src/pages/admin/other-settings.vue | 6 + .../src/pages/custom-emojis-manager.vue | 6 +- 16 files changed, 161 insertions(+), 433 deletions(-) create mode 100644 packages/backend/1703294653915-requestemoji.js delete mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/add-draft.ts delete mode 100644 packages/frontend/src/components/MkCustomEmojiEditDraft.vue diff --git a/locales/index.d.ts b/locales/index.d.ts index 71176daf8d..6d5bcd0c59 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1076,11 +1076,11 @@ export interface Locale { "hiddenTagsDescription": string; "notesSearchNotAvailable": string; "license": string; - "draft": string; - "undrafted": string; "requestPending": string; "approval": string; "requestingEmojis": string; + "draft": string; + "undrafted": string; "unfavoriteConfirm": string; "myClips": string; "drivecleaner": string; diff --git a/package.json b/package.json index d39b800a18..d9af23c2e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2023.12.0", + "version": "2023.12.0-PrisMisskey.1", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/backend/1703294653915-requestemoji.js b/packages/backend/1703294653915-requestemoji.js new file mode 100644 index 0000000000..358e77bf07 --- /dev/null +++ b/packages/backend/1703294653915-requestemoji.js @@ -0,0 +1,11 @@ +export class Requestemoji1703294653915 { + name = 'Requestemoji1703294653915' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "requestEmojiAllOk" boolean NOT NULL DEFAULT false`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "requestEmojiAllOk"`); + } +} diff --git a/packages/backend/src/models/Meta.ts b/packages/backend/src/models/Meta.ts index 4a81c39680..6a483d51d4 100644 --- a/packages/backend/src/models/Meta.ts +++ b/packages/backend/src/models/Meta.ts @@ -549,4 +549,9 @@ export class MiMeta { default: 0, }) public notesPerOneAd: number; + + @Column('boolean', { + default: false, + }) + public requestEmojiAllOk: boolean; } diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add-draft.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add-draft.ts deleted file mode 100644 index 978663be6b..0000000000 --- a/packages/backend/src/server/api/endpoints/admin/emoji/add-draft.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { Endpoint } from '@/server/api/endpoint-base.js'; -import type { DriveFilesRepository } from '@/models/_.js'; -import { DI } from '@/di-symbols.js'; -import { CustomEmojiService } from '@/core/CustomEmojiService.js'; -import { ModerationLogService } from '@/core/ModerationLogService.js'; -import { ApiError } from '../../../error.js'; -import { MetaService } from '@/core/MetaService.js'; -import {DriveService} from "@/core/DriveService.js"; -export const meta = { - tags: ['admin'], - - requireCredential: true, - requireRolePolicy: 'canRequestCustomEmojis', - - errors: { - noSuchFile: { - message: 'No such file.', - code: 'NO_SUCH_FILE', - id: 'fc46b5a4-6b92-4c33-ac66-b806659bb5cf', - }, - }, -} as const; - -export const paramDef = { - type: 'object', - properties: { - name: { type: 'string', pattern: '^[a-zA-Z0-9_]+$' }, - category: { - type: 'string', - nullable: true, - description: 'Use `null` to reset the category.', - }, - aliases: { type: 'array', items: { - type: 'string', - } }, - license: { type: 'string', nullable: true }, - fileId: { type: 'string', format: 'misskey:id' }, - isSensitive: { type: 'boolean' }, - localOnly: { type: 'boolean' }, - isNotifyIsHome: { type: 'boolean', default: false }, - }, - required: ['name', 'fileId'], -} as const; - -// TODO: ロジックをサービスに切り出す - -// eslint-disable-next-line import/no-default-export -@Injectable() -export default class extends Endpoint { - - constructor( - @Inject(DI.driveFilesRepository) - private driveFilesRepository: DriveFilesRepository, - private metaService: MetaService, - private customEmojiService: CustomEmojiService, - private moderationLogService: ModerationLogService, - private driveService: DriveService, - ) { - super(meta, paramDef, async (ps, me) => { - let driveFile; - let tmp = await this.driveFilesRepository.findOneBy({ id: ps.fileId }); - if (tmp == null) throw new ApiError(meta.errors.noSuchFile); - - try { - driveFile = await this.driveService.uploadFromUrl({ url: tmp.url , user: null, force: true }); - } catch (e) { - throw new ApiError(); - } - - const emoji = await this.customEmojiService.add({ - driveFile, - name: ps.name, - category: ps.category ?? null, - aliases: ps.aliases ?? [], - license: ps.license ?? null, - host: null, - draft: false, - isSensitive: ps.isSensitive ?? false, - localOnly: ps.localOnly ?? false, - roleIdsThatCanBeUsedThisEmojiAsReaction: [], - }); - const {ApiBase,EmojiBotToken,DiscordWebhookUrl} = (await this.metaService.fetch()) - - if (EmojiBotToken){ - const data_Miss = { - 'i': EmojiBotToken, - 'visibility': ps.isNotifyIsHome ? 'home' : 'public', - 'text': - '絵文字名 : :' + ps.name + ':\n' + - 'カテゴリ : ' + ps.category + '\n' + - 'ライセンス : ' + ps.license + '\n' + - 'タグ : ' + ps.aliases + '\n' + - '追加したユーザー : ' + '@' + me.username + '\n' - }; - await fetch(ApiBase+'/notes/create', { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body:JSON.stringify( data_Miss) - }) - } - - if (DiscordWebhookUrl){ - const data_disc = {"username": "絵文字追加通知ちゃん", - 'content': - '絵文字名 : :'+ ps.name +':\n' + - 'カテゴリ : ' + ps.category + '\n'+ - 'ライセンス : '+ ps.license + '\n'+ - 'タグ : '+ps.aliases+ '\n'+ - '追加したユーザー : ' + '@'+me.username + '\n' - } - await fetch(DiscordWebhookUrl, { - 'method':'post', - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(data_disc), - }) - } - - - return { - id: emoji.id, - }; - }); - } -} diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add-request.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add-request.ts index 609297f667..3818cd044a 100644 --- a/packages/backend/src/server/api/endpoints/admin/emoji/add-request.ts +++ b/packages/backend/src/server/api/endpoints/admin/emoji/add-request.ts @@ -5,6 +5,8 @@ import { DI } from '@/di-symbols.js'; import { CustomEmojiService } from '@/core/CustomEmojiService.js'; import { ModerationLogService } from '@/core/ModerationLogService.js'; import { ApiError } from '../../../error.js'; +import {MetaService} from "@/core/MetaService.js"; +import {DriveService} from "@/core/DriveService.js"; export const meta = { tags: ['admin'], @@ -54,9 +56,9 @@ export default class extends Endpoint { constructor( @Inject(DI.driveFilesRepository) private driveFilesRepository: DriveFilesRepository, - + private metaService: MetaService, private customEmojiService: CustomEmojiService, - + private driveService: DriveService, private moderationLogService: ModerationLogService, ) { super(meta, paramDef, async (ps, me) => { @@ -64,25 +66,81 @@ export default class extends Endpoint { const isRequestDuplicate = await this.customEmojiService.checkRequestDuplicate(ps.name); if (isDuplicate || isRequestDuplicate) throw new ApiError(meta.errors.duplicateName); - const driveFile = await this.driveFilesRepository.findOneBy({ id: ps.fileId }); - + let driveFile; + driveFile = await this.driveFilesRepository.findOneBy({ id: ps.fileId }); if (driveFile == null) throw new ApiError(meta.errors.noSuchFile); - const emoji = await this.customEmojiService.request({ - driveFile, - name: ps.name, - category: ps.category ?? null, - aliases: ps.aliases ?? [], - license: ps.license ?? null, - isSensitive: ps.isSensitive ?? false, - localOnly: ps.localOnly ?? false, - }); + if (driveFile == null) throw new ApiError(meta.errors.noSuchFile); + const {ApiBase,EmojiBotToken,DiscordWebhookUrl,requestEmojiAllOk} = (await this.metaService.fetch()) + let emoji; + if (requestEmojiAllOk){ + emoji = await this.customEmojiService.add({ + driveFile, + name: ps.name, + category: ps.category ?? null, + aliases: ps.aliases ?? [], + license: ps.license ?? null, + host: null, + draft: false, + isSensitive: ps.isSensitive ?? false, + localOnly: ps.localOnly ?? false, + roleIdsThatCanBeUsedThisEmojiAsReaction: [], + }); + }else{ + emoji = await this.customEmojiService.request({ + driveFile, + name: ps.name, + category: ps.category ?? null, + aliases: ps.aliases ?? [], + license: ps.license ?? null, + isSensitive: ps.isSensitive ?? false, + localOnly: ps.localOnly ?? false, + }); + } + await this.moderationLogService.log(me, 'addCustomEmoji', { emojiId: emoji.id, emoji: emoji, }); + if (EmojiBotToken){ + const data_Miss = { + 'i': EmojiBotToken, + 'visibility': ps.isNotifyIsHome ? 'home' : 'public', + 'text': + '絵文字名 : :' + ps.name + ':\n' + + 'カテゴリ : ' + ps.category + '\n' + + 'ライセンス : ' + ps.license + '\n' + + 'タグ : ' + ps.aliases + '\n' + + '追加したユーザー : ' + '@' + me.username + '\n' + }; + await fetch(ApiBase+'/notes/create', { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body:JSON.stringify( data_Miss) + }) + } + + if (DiscordWebhookUrl){ + const data_disc = {"username": "絵文字追加通知ちゃん", + 'content': + '絵文字名 : :'+ ps.name +':\n' + + 'カテゴリ : ' + ps.category + '\n'+ + 'ライセンス : '+ ps.license + '\n'+ + 'タグ : '+ps.aliases+ '\n'+ + '追加したユーザー : ' + '@'+me.username + '\n' + } + await fetch(DiscordWebhookUrl, { + 'method':'post', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data_disc), + }) + } return { id: emoji.id, }; diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 9fe23c7ace..cdb920b910 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -455,6 +455,7 @@ export default class extends Endpoint { // eslint- turnstileSiteKey: instance.turnstileSiteKey, swPublickey: instance.swPublicKey, themeColor: instance.themeColor, + requestEmojiAllOk: instance.requestEmojiAllOk, mascotImageUrl: instance.mascotImageUrl, bannerUrl: instance.bannerUrl, serverErrorImageUrl: instance.serverErrorImageUrl, diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index 3b7e6ad224..faa84fba7c 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -103,6 +103,7 @@ export const paramDef = { privacyPolicyUrl: { type: 'string', nullable: true }, useObjectStorage: { type: 'boolean' }, objectStorageBaseUrl: { type: 'string', nullable: true }, + requestEmojiAllOk: { type: 'boolean', nullable: true }, objectStorageBucket: { type: 'string', nullable: true }, objectStoragePrefix: { type: 'string', nullable: true }, objectStorageEndpoint: { type: 'string', nullable: true }, @@ -221,6 +222,9 @@ export default class extends Endpoint { // eslint- set.infoImageUrl = ps.infoImageUrl; } + if (ps.requestEmojiAllOk !== undefined) { + set.requestEmojiAllOk = ps.requestEmojiAllOk; + } if (ps.notFoundImageUrl !== undefined) { set.notFoundImageUrl = ps.notFoundImageUrl; } diff --git a/packages/frontend/src/components/MkCustomEmojiEditDraft.vue b/packages/frontend/src/components/MkCustomEmojiEditDraft.vue deleted file mode 100644 index 34d033119d..0000000000 --- a/packages/frontend/src/components/MkCustomEmojiEditDraft.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - - diff --git a/packages/frontend/src/components/MkCustomEmojiEditLocal.vue b/packages/frontend/src/components/MkCustomEmojiEditLocal.vue index 8d9484b8e7..e7d8e86ee5 100644 --- a/packages/frontend/src/components/MkCustomEmojiEditLocal.vue +++ b/packages/frontend/src/components/MkCustomEmojiEditLocal.vue @@ -48,8 +48,8 @@ import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; import MkPagination from '@/components/MkPagination.vue'; import MkSwitch from '@/components/MkSwitch.vue'; -import * as os from '@/os'; -import { i18n } from '@/i18n'; +import * as os from '@/os.js'; +import { i18n } from '@/i18n.js'; const emojisPaginationComponent = shallowRef>(); @@ -96,13 +96,6 @@ const setlocalOnlyBulk = async () => { }); emojisPaginationComponent.value.reload(); }; -const selectAll = () => { - if (selectedEmojis.value.length > 0) { - selectedEmojis.value = []; - } else { - selectedEmojis.value = Array.from(emojisPaginationComponent.value.items.values(), item => item.id); - } -}; const toggleSelect = (emoji) => { diff --git a/packages/frontend/src/components/MkEmojiEditDialog.vue b/packages/frontend/src/components/MkEmojiEditDialog.vue index a2335d8d16..ef60a60225 100644 --- a/packages/frontend/src/components/MkEmojiEditDialog.vue +++ b/packages/frontend/src/components/MkEmojiEditDialog.vue @@ -63,8 +63,6 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn }} - isSensitive - {{ i18n.ts.localOnly }} {{ i18n.ts.isSensitive }} {{ i18n.ts.localOnly }} @@ -86,7 +84,7 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index 6f671b7310..8827949200 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -244,7 +244,6 @@ if (darkMode.value && gamingMode.value == true) { } watch(darkMode, () => { - console.log(gaming) if (darkMode.value && gamingMode.value == true) { gaming.value = 'dark'; } else if (!darkMode.value && gamingMode.value == true) { diff --git a/packages/frontend/src/components/MkSwitch.vue b/packages/frontend/src/components/MkSwitch.vue index ed9ec10176..6f36acfc6e 100644 --- a/packages/frontend/src/components/MkSwitch.vue +++ b/packages/frontend/src/components/MkSwitch.vue @@ -32,8 +32,6 @@ import XButton from '@/components/MkSwitch.button.vue'; import {defaultStore} from "@/store.js"; const gamingType = computed(defaultStore.makeGetterSetter('gamingType')); -console.log(gamingType.value) - const props = defineProps<{ modelValue: boolean | Ref; disabled?: boolean; diff --git a/packages/frontend/src/pages/about.emojis.vue b/packages/frontend/src/pages/about.emojis.vue index 150aab340c..37fb7934a9 100644 --- a/packages/frontend/src/pages/about.emojis.vue +++ b/packages/frontend/src/pages/about.emojis.vue @@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.manageCustomEmojis }} - {{ i18n.ts.requestCustomEmojis }} + {{ i18n.ts.requestCustomEmojis }}
@@ -45,7 +45,7 @@ SPDX-License-Identifier: AGPL-3.0-only