import define from "../../define.js"; import { ApiError } from "../../error.js"; import { Channels, DriveFiles } from "../../../../models/index.js"; import { genId } from "../../../../misc/gen-id.js"; export const meta = { tags: [ "channels" ], requireCredential: true, kind: "write:channels", res: { type: "object", optional: false, nullable: false, ref: "Channel" }, errors: { noSuchFile: { message: "No such file.", code: "NO_SUCH_FILE", id: "cd1e9f3e-5a12-4ab4-96f6-5d0a2cc32050" } } }; export const paramDef = { type: "object", properties: { name: { type: "string", minLength: 1, maxLength: 128 }, description: { type: "string", nullable: true, minLength: 1, maxLength: 2048 }, bannerId: { type: "string", format: "misskey:id", nullable: true } }, required: [ "name" ] }; export default define(meta, paramDef, async (ps, user)=>{ let banner = null; if (ps.bannerId != null) { banner = await DriveFiles.findOneBy({ id: ps.bannerId, userId: user.id }); if (banner == null) { throw new ApiError(meta.errors.noSuchFile); } } const channel = await Channels.insert({ id: genId(), createdAt: new Date(), userId: user.id, name: ps.name, description: ps.description || null, bannerId: banner ? banner.id : null }).then((x)=>Channels.findOneByOrFail(x.identifiers[0])); return await Channels.pack(channel, user); });