60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Inject, Injectable } from '@nestjs/common';
 | |
| import { Endpoint } from '@/server/api/endpoint-base.js';
 | |
| import { CustomEmojiService } from '@/core/CustomEmojiService.js';
 | |
| import { ApiError } from '../../../error.js';
 | |
| 
 | |
| export const meta = {
 | |
| 	tags: ['admin'],
 | |
| 
 | |
| 	requireCredential: true,
 | |
| 	requireRolePolicy: 'canManageCustomEmojis',
 | |
| 
 | |
| 	errors: {
 | |
| 		noSuchEmoji: {
 | |
| 			message: 'No such emoji.',
 | |
| 			code: 'NO_SUCH_EMOJI',
 | |
| 			id: '684dec9d-a8c2-4364-9aa8-456c49cb1dc8',
 | |
| 		},
 | |
| 		sameNameEmojiExists: {
 | |
| 			message: 'Emoji that have same name already exists.',
 | |
| 			code: 'SAME_NAME_EMOJI_EXISTS',
 | |
| 			id: '7180fe9d-1ee3-bff9-647d-fe9896d2ffb8',
 | |
| 		},
 | |
| 	},
 | |
| } as const;
 | |
| 
 | |
| export const paramDef = {
 | |
| 	type: 'object',
 | |
| 	properties: {
 | |
| 		id: { type: 'string', format: 'misskey:id' },
 | |
| 		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 },
 | |
| 	},
 | |
| 	required: ['id', 'name', 'aliases'],
 | |
| } as const;
 | |
| 
 | |
| // eslint-disable-next-line import/no-default-export
 | |
| @Injectable()
 | |
| export default class extends Endpoint<typeof meta, typeof paramDef> {
 | |
| 	constructor(
 | |
| 		private customEmojiService: CustomEmojiService,
 | |
| 	) {
 | |
| 		super(meta, paramDef, async (ps, me) => {
 | |
| 			await this.customEmojiService.update(ps.id, {
 | |
| 				name: ps.name,
 | |
| 				category: ps.category ?? null,
 | |
| 				aliases: ps.aliases,
 | |
| 				license: ps.license ?? null,
 | |
| 			});
 | |
| 		});
 | |
| 	}
 | |
| }
 | 
