const {googleGenaiImagen} = require("#api"); const { PERMISSION_GROUPS } = require("#constants"); const { createEmbed } = require("#utils/embed"); const { acknowledge } = require("#utils/interactions"); const { iconPill, stringwrap } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATIC_ICONS, STATIC_ASSETS } = require("#utils/statics"); const { hasFeature } = require("#utils/testing"); module.exports = { name: 'imagen', label: 'text', aliases: ['aiimg'], metadata: { description: `${iconPill("generative_ai", "LIMITED TESTING")}\n\nGenerate images with Imagen 3`, description_short: 'Create Images with Imagen 3', examples: ['imagen a painting of northern lights'], category: 'limited', usage: 'imagen ' }, permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/imagen")) return; await acknowledge(context); if(!args.text) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (prompt).`)) const IMAGE_COUNT = 4; try{ let loadingEmbeds = []; for (let i = 0; i < IMAGE_COUNT; i++) { loadingEmbeds.push(createEmbed("defaultNoFooter", context, { url: "https://bignutty.gitlab.io", author: { iconUrl: STATIC_ICONS.ai_image_processing, name: "Generating images..." }, image: { url: STATIC_ASSETS.image_loading_splash(Math.floor(Math.random()*10)) } })) } await editOrReply(context, {embeds: loadingEmbeds}); let res = await googleGenaiImagen(context, args.text, IMAGE_COUNT); // Construct Embeds let files = []; let embeds = res.response.body.predictions.map((i)=>{ let imgName = `lcigen.${(Date.now() + Math.random()).toString(36)}.${i.mimeType.split("/")[1]}`; files.push({ filename: imgName, value: Buffer.from(i.bytesBase64Encoded, 'base64') }) return createEmbed("defaultNoFooter", context, { url: "https://bignutty.gitlab.io", author: { iconUrl: STATIC_ICONS.ai_image, name: stringwrap(args.text, 50, false), }, image: { url: `attachment://${imgName}` }, footer: { text: `Generative AI is experimental • Use AI Images responsibly.` } }) }); return editOrReply(context, {embeds, files}); } catch(e){ console.log(e) if(e.response?.body?.message) return editOrReply(context, createEmbed("error", context, e.response.body.message)) return editOrReply(context, createEmbed("error", context, `Unable to generate image.`)) } } };