From b1158fb1a7e26985ab5041a84340a576915f1cfe Mon Sep 17 00:00:00 2001 From: cherishsince Date: Sat, 6 Apr 2024 21:53:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9B=BE=E7=89=87=E9=80=89?= =?UTF-8?q?=E6=8B=A9=EF=BC=8C=E5=92=8C=E5=9B=BE=E7=89=87=E6=94=BE=E5=A4=A7?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/midjourney/MidjourneyConfig.java | 30 +++++++++++------ .../framework/ai/midjourney/MjMessage.java | 1 + .../ai/midjourney/interactions/MjClient.java | 3 +- .../interactions/MjImagineInteractions.java | 33 +++++++++++++++++-- .../framework/ai/midjourney/vo/ReRoll.java | 16 +++++++++ .../src/main/resources/http-body/reroll.json | 14 ++++++++ 6 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/vo/ReRoll.java create mode 100644 yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyConfig.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyConfig.java index 48f43ca60..dd8a599c6 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyConfig.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyConfig.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.util.Map; +import java.util.UUID; /** * Midjourney 配置 @@ -15,16 +16,6 @@ import java.util.Map; @Accessors(chain = true) public class MidjourneyConfig { - public MidjourneyConfig(String token, String guildId, String channelId, Map requestTemplates) { - this.token = token; - this.guildId = guildId; - this.channelId = channelId; - this.serverUrl = serverUrl; - this.apiInteractions = apiInteractions; - this.userAage = userAage; - this.requestTemplates = requestTemplates; - } - /** * token信息 * @@ -64,4 +55,23 @@ public class MidjourneyConfig { private Map requestTemplates; + + // + // + + private String sessionId; + + public MidjourneyConfig(String token, String guildId, String channelId, Map requestTemplates) { + this.token = token; + this.guildId = guildId; + this.channelId = channelId; + this.serverUrl = serverUrl; + this.apiInteractions = apiInteractions; + this.userAage = userAage; + this.requestTemplates = requestTemplates; + + // 生成 session id + sessionId = UUID.randomUUID().toString().replaceAll("-", ""); + } + } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MjMessage.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MjMessage.java index f4cf47d5d..2160e8e14 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MjMessage.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/MjMessage.java @@ -17,6 +17,7 @@ public class MjMessage { * 现在已知: * 0:我们发送的消息,和指令 * 20: mj生成图片发送过程中 + * 19: 选择了某一张图片后的通知 */ private Integer type; /** diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjClient.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjClient.java index 17fa16c8b..c2ffb0f0f 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjClient.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjClient.java @@ -32,8 +32,7 @@ public class MjClient { // 封装请求体和头部信息 HttpEntity requestEntity = new HttpEntity<>(body, headers); // 发送请求 - String result = restTemplate.postForObject(url, requestEntity, String.class); - return result; + return restTemplate.postForObject(url, requestEntity, String.class); } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjImagineInteractions.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjImagineInteractions.java index 5e49d6784..4ffceba15 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjImagineInteractions.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/interactions/MjImagineInteractions.java @@ -4,6 +4,8 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyConfig; import cn.iocoder.yudao.framework.ai.midjourney.constants.MjInteractionsEnum; +import cn.iocoder.yudao.framework.ai.midjourney.vo.ReRoll; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -12,7 +14,7 @@ import java.util.List; import java.util.UUID; /** - * + * 图片生成 * * author: fansili * time: 2024/4/3 17:36 @@ -28,7 +30,7 @@ public class MjImagineInteractions implements MjInteractions { @Override public List supperInteractions() { - return null; + return Lists.newArrayList(MjInteractionsEnum.IMAGINE); } @Override @@ -40,7 +42,7 @@ public class MjImagineInteractions implements MjInteractions { HashMap requestParams = Maps.newHashMap(); requestParams.put("guild_id", midjourneyConfig.getGuildId()); requestParams.put("channel_id", midjourneyConfig.getChannelId()); - requestParams.put("session_id", UUID.randomUUID().toString().replaceAll("-", "")); + requestParams.put("session_id", midjourneyConfig.getSessionId()); requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId())); requestParams.put("prompt", prompt); // 设置参数 @@ -55,4 +57,29 @@ public class MjImagineInteractions implements MjInteractions { log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res); return isSuccess; } + + public Boolean reRoll(ReRoll reRoll) { + String url = midjourneyConfig.getServerUrl().concat(midjourneyConfig.getApiInteractions()); + // 获取请求模板 + String requestTemplate = midjourneyConfig.getRequestTemplates().get("reroll"); + // 设置参数 + HashMap requestParams = Maps.newHashMap(); + requestParams.put("guild_id", midjourneyConfig.getGuildId()); + requestParams.put("channel_id", midjourneyConfig.getChannelId()); + requestParams.put("session_id", midjourneyConfig.getSessionId()); + requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId())); + requestParams.put("custom_id", reRoll.getCustomId()); + requestParams.put("message_id", reRoll.getMessageId()); + // 设置参数 + String requestBody = MjClient.setParams(requestTemplate, requestParams); + // 发送请求 + String res = MjClient.post(url, midjourneyConfig.getToken(), requestBody); + // 这个 res 只要不返回值,就是成功! + boolean isSuccess = StrUtil.isBlank(res); + if (isSuccess) { + return true; + } + log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res); + return isSuccess; + } } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/vo/ReRoll.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/vo/ReRoll.java new file mode 100644 index 000000000..2d39ba1df --- /dev/null +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/midjourney/vo/ReRoll.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.framework.ai.midjourney.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * author: fansili + * time: 2024/4/6 21:33 + */ +@Data +@Accessors(chain = true) +public class ReRoll { + + private String messageId; + private String customId; +} diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json new file mode 100644 index 000000000..9bc425cde --- /dev/null +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json @@ -0,0 +1,14 @@ +{ + "type": 3, + "guild_id": "$guild_id", + "channel_id": "$channel_id", + "message_id": "$message_id", + "application_id": "936929561302675456", + "session_id": "$session_id", + "nonce": "$nonce", + "message_flags": 0, + "data": { + "component_type": 2, + "custom_id": "$custom_id" + } +} \ No newline at end of file