import define from "../../../define.js"; import { Emojis } from "@/models/index.js"; import { toPuny } from "@/misc/convert-host.js"; import { makePaginationQuery } from "../../../common/make-pagination-query.js"; export const meta = { tags: ["admin"], requireCredential: true, requireModerator: true, res: { type: "array", optional: false, nullable: false, items: { type: "object", optional: false, nullable: false, properties: { id: { type: "string", optional: false, nullable: false, format: "id", }, aliases: { type: "array", optional: false, nullable: false, items: { type: "string", optional: false, nullable: false, }, }, name: { type: "string", optional: false, nullable: false, }, category: { type: "string", optional: false, nullable: true, }, host: { type: "string", optional: false, nullable: true, description: "The local host is represented with `null`.", }, url: { type: "string", optional: false, nullable: false, }, }, }, }, } as const; export const paramDef = { type: "object", properties: { query: { type: "string", nullable: true, default: null }, host: { type: "string", nullable: true, default: null, description: "Use `null` to represent the local host.", }, limit: { type: "integer", minimum: 1, maximum: 100, default: 10 }, sinceId: { type: "string", format: "misskey:id" }, untilId: { type: "string", format: "misskey:id" }, }, required: [], } as const; export default define(meta, paramDef, async (ps) => { const q = makePaginationQuery( Emojis.createQueryBuilder("emoji"), ps.sinceId, ps.untilId, ); if (ps.host == null) { q.andWhere("emoji.host IS NOT NULL"); } else { q.andWhere("emoji.host = :host", { host: toPuny(ps.host) }); } if (ps.query) { q.andWhere("emoji.name like :query", { query: `%${ps.query}%` }); } const emojis = await q.orderBy("emoji.id", "DESC").take(ps.limit).getMany(); return Emojis.packMany(emojis); });