Fixed 267U.pre2

This commit is contained in:
2026-07-26 18:25:37 +09:00
parent 50bfaeafdf
commit 317d00a284
1286 changed files with 80222 additions and 1 deletions
@@ -0,0 +1,96 @@
import define from "../../../define.js";
import { ApiError } from "../../../error.js";
import { DriveFiles, UserEmojis } from "../../../../../models/index.js";
import { genId } from "../../../../../misc/gen-id.js";
import { getEmojiSize } from "../../../../../misc/emoji-meta.js";
import { clearUserEmojiCache } from "../../../../../misc/populate-emojis.js";
function normalizeMimeType(type) {
const mime = type?.split(";")[0]?.trim().toLowerCase();
return mime && mime.length <= 64 ? mime : null;
}
export const meta = {
tags: [
"account"
],
requireCredential: true,
kind: "write:account",
errors: {
noSuchFile: {
message: "No such file.",
code: "NO_SUCH_FILE",
id: "7be656a7-cb71-41a8-9904-e8b6481e61dd"
},
notImage: {
message: "The file is not an image.",
code: "NOT_IMAGE",
id: "64cfbb24-2628-4217-873d-09e22957cf49"
},
alreadyExists: {
message: "User emoji already exists.",
code: "ALREADY_EXISTS",
id: "259b6fdb-c603-4244-81cb-7218b967ab62"
}
}
};
export const paramDef = {
type: "object",
properties: {
name: {
type: "string",
pattern: "^[a-z0-9_]{1,64}$"
},
fileId: {
type: "string",
format: "misskey:id"
},
glyph: {
type: "boolean",
default: false
}
},
required: [
"name",
"fileId"
]
};
export default define(meta, paramDef, async (ps, me)=>{
const file = await DriveFiles.findOneBy({
id: ps.fileId,
userId: me.id
});
if (!file) throw new ApiError(meta.errors.noSuchFile);
if (!file.type.startsWith("image/")) throw new ApiError(meta.errors.notImage);
const exists = await UserEmojis.findOneBy({
name: ps.name,
userId: me.id
});
if (exists) throw new ApiError(meta.errors.alreadyExists);
const size = await getEmojiSize(file.url).catch(()=>({
width: null,
height: null
}));
const type = normalizeMimeType(file.webpublicType ?? file.type);
const emoji = await UserEmojis.insert({
id: genId(),
createdAt: new Date(),
name: ps.name,
userId: me.id,
userGroupId: null,
originalUrl: file.url,
publicUrl: file.webpublicUrl ?? file.url,
type,
glyph: ps.glyph,
width: size.width || null,
height: size.height || null
}).then((x)=>UserEmojis.findOneByOrFail(x.identifiers[0]));
await clearUserEmojiCache(emoji.name, me.username, me.host);
return {
id: emoji.id,
name: emoji.name,
url: emoji.publicUrl || emoji.originalUrl,
glyph: emoji.glyph,
glyphUrl: emoji.glyph ? emoji.originalUrl : null,
width: emoji.width,
height: emoji.height
};
});