in src/commands/Draw.ts [97:155]
run: async (client: Client, interaction: ChatInputCommandInteraction) => {
const uuid = interaction.user.id;
const prompt = interaction.options.getString("prompt");
const count = interaction.options.getInteger("n") ?? DEFAULT_IMAGES;
const style = (interaction.options.getString("style") ?? DEFAULT_STYLE) as Style;
const quality = (interaction.options.getString("quality") ?? DEFAULT_QUALITY) as Quality;
const size = (interaction.options.getString("size") ?? "1024x1024") as Size;
const width = parseInt(size.split("x")[0]);
const height = parseInt(size.split("x")[1]);
if (prompt == null) {
await interaction.reply("Prompt must exist.");
return;
}
await interaction.deferReply();
try {
// Run the API calls in parallel and then collect afterwards
const imagePromises = Array.from({ length: count }, () =>
configuration.images.generate({
prompt: prompt,
n: 1, // Generate only one image per call (dall-e-3 restriction)
size: size,
response_format: "b64_json",
model: "dall-e-3",
quality: quality,
style: style
}).then(completion => imagesFromBase64Response(completion.data))
);
// Wait for all promises to resolve
const imageArrays = await Promise.all(imagePromises);
const images = imageArrays.flat();
const context: CustomIdContext = {
count: count,
quality: quality,
style: style,
width: width,
height: height
}
const response = await createResponse(
prompt,
images,
defaultActions(count),
context
);
interaction
.followUp({ ...response, content: `<@${uuid}>` })
.catch(console.error);
} catch (e) {
// Print the stack trace
console.error(e);
const response = processOpenAIError(e as any, prompt);
interaction.followUp({ ...response }).catch(console.error);
}
},