This commit is contained in:
こけっち 2022-09-18 16:39:35 +09:00
parent 677f6bd6e1
commit c7b6e0cbf9
No known key found for this signature in database
GPG Key ID: 21460619C5FC4DD1

View File

@ -1,15 +1,14 @@
import { defineAsyncComponent } from 'vue';
import { $i } from '@/account'; import { $i } from '@/account';
import { i18n } from '@/i18n'; import { i18n } from '@/i18n';
import * as os from '@/os'; import * as os from '@/os';
import copyToClipboard from '@/scripts/copy-to-clipboard'; import copyToClipboard from '@/scripts/copy-to-clipboard';
import { defineAsyncComponent } from 'vue';
import { entities } from 'misskey-js';
import { MenuItem } from '@/types/menu'; import { MenuItem } from '@/types/menu';
import { CustomEmoji } from 'misskey-js/built/entities';
export async function openReactionImportMenu(ev: MouseEvent, reaction: string) { export async function openReactionImportMenu(ev: MouseEvent, reaction: string): Promise<void> {
if (!reaction) return;
const getEmojiObject = emojiId => new Promise<Record<string, any> | null>(async resolve => { const getEmojiObject = (emojiId): Promise<Record<string, any> | null> => new Promise<Record<string, any> | null>(async resolve => {
const sinceId = await os.api('admin/emoji/list', { const sinceId = await os.api('admin/emoji/list', {
limit: 1, limit: 1,
untilId: emojiId.id, untilId: emojiId.id,
@ -33,14 +32,12 @@ export async function openReactionImportMenu(ev: MouseEvent, reaction: string) {
resolve(id[0]); resolve(id[0]);
}); });
const getEmojiId = async (emojiName: string) => { const getEmojiId = async (emojiName: string): Promise<string | null> => {
const isLocal = (emojiName.match(/(?<=@).*\.*(?=:)/g) === null || emojiName.match(/(?<=@).*\.*(?=:)/g)[0] === '.');
const isLocal = (emojiName.match(/(?<=@).*\.*(?=:)/g) == null || emojiName.match(/(?<=@).*\.*(?=:)/g)[0] == '.');
if (isLocal) return null; if (isLocal) return null;
const host = emojiName.match(/(?<=@).*\.*(?=:)/g)[0]; const host = emojiName.match(/(?<=@).*\.*(?=:)/g)[0];
const name = emojiName.match(/(?<=:).*(?=@.*\.*(?=:))/g)[0]; const name = emojiName.match(/(?<=:).*(?=@.*\.*(?=:))/g)[0];
if (!host || !name) return; if (!host || !name) return null;
const resList: Record<string, any>[] = await os.api('admin/emoji/list-remote', { const resList: Record<string, any>[] = await os.api('admin/emoji/list-remote', {
host, host,
@ -48,12 +45,12 @@ export async function openReactionImportMenu(ev: MouseEvent, reaction: string) {
limit: 100, limit: 100,
}); });
const emojiId = await resList.find(emoji => emoji.name == name && emoji.host == host)?.id; const emojiId = await resList.find(emoji => emoji.name === name && emoji.host === host)?.id;
return emojiId; return emojiId;
} };
const importEmoji = async (emojiName: string) => { const importEmoji = async (emojiName: string): Promise<void> => {
const emojiId = await getEmojiId(emojiName); const emojiId = await getEmojiId(emojiName);
if (!await emojiId) return; if (!await emojiId) return;
os.api('admin/emoji/copy', { os.api('admin/emoji/copy', {
@ -63,9 +60,6 @@ export async function openReactionImportMenu(ev: MouseEvent, reaction: string) {
})); }));
}; };
if (!($i?.isAdmin || $i?.isModerator)) return;
if (!reaction) return;
const menuItems: MenuItem[] = [{ const menuItems: MenuItem[] = [{
type: 'label', type: 'label',
text: reaction, text: reaction,
@ -73,18 +67,15 @@ export async function openReactionImportMenu(ev: MouseEvent, reaction: string) {
type: 'button', type: 'button',
icon: 'fas fa-copy', icon: 'fas fa-copy',
text: i18n.ts.copy, text: i18n.ts.copy,
action: () => { action: (): void => {
copyToClipboard(reaction => { console.log('copy');
if (reaction.startsWith(':')) { copyToClipboard(reaction.startsWith(':') ? `:${reaction.match(/(?<=:).*(?=@.*\.*(?=:))/g)[0]}:` : reaction);
return `:${reaction.match(/(?<=:).*(?=@.*\.*(?=:))/g)[0]}:` || reaction;
} else {
return reaction;
}
});
}, },
}]; }];
const emojiId = await getEmojiId(reaction) ? await getEmojiId(reaction) : reaction; const emojiId = await getEmojiId(reaction) ? await getEmojiId(reaction) : reaction;
if (reaction.startsWith(':') && emojiId) { if (reaction.startsWith(':') && emojiId) {
if (!($i?.isAdmin || $i?.isModerator)) return;
menuItems.push({ menuItems.push({
type: 'button', type: 'button',
icon: 'fas fa-download', icon: 'fas fa-download',
@ -113,7 +104,5 @@ export async function openReactionImportMenu(ev: MouseEvent, reaction: string) {
} }
os.contextMenu(menuItems, ev); os.contextMenu(menuItems, ev);
} }