run: async()

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);
    }
  },