Commit 88142ed74c47e2cd555e65aed0fc78fdf247cc2a

Authored by YunaiV
1 parent 75a91a2c

【代码评审】AI:移除老版本的 MJ 接入

Showing 64 changed files with 1 additions and 4875 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/image/midjourneyHandler/YuDaoMidjourneyMessageHandler.java deleted
1   -package cn.iocoder.yudao.module.ai.service.image.midjourneyHandler;
2   -
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.hutool.core.util.StrUtil;
5   -import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageMidjourneyOperationsVO;
6   -import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
7   -import cn.iocoder.yudao.module.ai.dal.mysql.image.AiImageMapper;
8   -import cn.iocoder.yudao.module.ai.enums.image.AiImageStatusEnum;
9   -import com.alibaba.fastjson.JSON;
10   -import lombok.AllArgsConstructor;
11   -import lombok.extern.slf4j.Slf4j;
12   -import org.springframework.ai.models.midjourney.MidjourneyMessage;
13   -import org.springframework.ai.models.midjourney.constants.MidjourneyGennerateStatusEnum;
14   -import org.springframework.ai.models.midjourney.webSocket.MidjourneyMessageHandler;
15   -import org.springframework.stereotype.Component;
16   -
17   -import java.util.List;
18   -
19   -/**
20   - * yudao message handler
21   - *
22   - * @author fansili
23   - * @time 2024/4/29 14:34
24   - * @since 1.0
25   - */
26   -@Component
27   -@Slf4j
28   -@AllArgsConstructor
29   -public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler {
30   -
31   - private final AiImageMapper aiImageMapper;
32   -
33   - @Override
34   - public void messageHandler(MidjourneyMessage midjourneyMessage) {
35   - log.info("yudao-midjourney-midjourney-message-handler {}", JSON.toJSONString(midjourneyMessage));
36   - if (midjourneyMessage.getContent() != null) {
37   - log.info("进度id {} 状态 {} 进度 {}",
38   - midjourneyMessage.getNonce(),
39   - midjourneyMessage.getGenerateStatus(),
40   - midjourneyMessage.getContent().getProgress());
41   - }
42   - //
43   - updateImage(midjourneyMessage);
44   - }
45   -
46   - private void updateImage(MidjourneyMessage midjourneyMessage) {
47   - // Nonce 不存在不更新
48   - if (StrUtil.isBlank(midjourneyMessage.getNonce())) {
49   - return;
50   - }
51   - // 根据 Embeds 来判断是否异常
52   - if (CollUtil.isEmpty(midjourneyMessage.getEmbeds())) {
53   - successHandler(midjourneyMessage);
54   - } else {
55   - errorHandler(midjourneyMessage);
56   - }
57   - }
58   -
59   - private void errorHandler(MidjourneyMessage midjourneyMessage) {
60   - // image 编号
61   - Long nonceId = Long.valueOf(midjourneyMessage.getNonce());
62   - // 获取 error message
63   - String errorMessage = getErrorMessage(midjourneyMessage);
64   - aiImageMapper.updateByMjNonce(nonceId,
65   - new AiImageDO()
66   - .setErrorMessage(errorMessage)
67   - .setStatus(AiImageStatusEnum.FAIL.getStatus())
68   - );
69   - }
70   -
71   - private String getErrorMessage(MidjourneyMessage midjourneyMessage) {
72   - StringBuilder errorMessage = new StringBuilder();
73   - for (MidjourneyMessage.Embed embed : midjourneyMessage.getEmbeds()) {
74   - errorMessage.append(embed.getDescription());
75   - }
76   - return errorMessage.toString();
77   - }
78   -
79   - private void successHandler(MidjourneyMessage midjourneyMessage) {
80   - // 获取id
81   - Long nonceId = Long.valueOf(midjourneyMessage.getNonce());
82   - // TODO @芋艿 这个地方有问题,不能根据 nonce来更新,不返回这个信息(别人获取了 image-xxx-xx 后面一段hash,由于没有mj账号测试,暂不清楚。)
83   - // 获取生成 url
84   - String imageUrl = null;
85   - if (CollUtil.isNotEmpty(midjourneyMessage.getAttachments())) {
86   - imageUrl = midjourneyMessage.getAttachments().get(0).getUrl();
87   - }
88   - // 转换状态
89   - AiImageStatusEnum drawingStatusEnum = null;
90   - String generateStatus = midjourneyMessage.getGenerateStatus();
91   - if (MidjourneyGennerateStatusEnum.COMPLETED.getStatus().equals(generateStatus)) {
92   - drawingStatusEnum = AiImageStatusEnum.SUCCESS;
93   - } else if (MidjourneyGennerateStatusEnum.IN_PROGRESS.getStatus().equals(generateStatus)) {
94   - drawingStatusEnum = AiImageStatusEnum.IN_PROGRESS;
95   - }
96   -// else if (MidjourneyGennerateStatusEnum.WAITING.getStatus().equals(generateStatus)) {
97   -// drawingStatusEnum = AiImageStatusEnum.WAITING;
98   -// }
99   - // 获取 midjourneyOperations
100   - List<AiImageMidjourneyOperationsVO> midjourneyOperations = getMidjourneyOperationsList(midjourneyMessage);
101   - // 更新数据库
102   - aiImageMapper.updateByMjNonce(nonceId,
103   - new AiImageDO()
104   - .setStatus(drawingStatusEnum == null ? null : drawingStatusEnum.getStatus())
105   -// .setMjNonceId(midjourneyMessage.getId())
106   -// .setMjOperations(JsonUtils.toJsonString(midjourneyOperations))
107   - );
108   - }
109   -
110   - private List<AiImageMidjourneyOperationsVO> getMidjourneyOperationsList(MidjourneyMessage midjourneyMessage) {
111   -// // 为空直接返回
112   -// if (CollUtil.isEmpty(midjourneyMessage.getComponents())) {
113   -// return Collections.emptyList();
114   -// }
115   -// // 将 component 转成 AiImageMidjourneyOperationsVO
116   -// return midjourneyMessage.getComponents().stream()
117   -// .map(componentType -> componentType.getComponents().stream()
118   -// .map(AiImageConvert.INSTANCE::convertAiImageMidjourneyOperationsVO)
119   -// .collect(Collectors.toList()))
120   -// .toList().stream().flatMap(List::stream).toList();
121   - return null;
122   - }
123   -}
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/image/midjourneyHandler/typeHandler/AiChatModelConfigTypeHandler.java deleted
1   -//package cn.iocoder.yudao.module.ai.mapper.typeHandler;
2   -//
3   -//import cn.hutool.core.util.StrUtil;
4   -//import cn.iocoder.yudao.framework.ai.AiPlatformEnum;
5   -//import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
6   -//import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO;
7   -//import org.apache.ibatis.type.BaseTypeHandler;
8   -//import org.apache.ibatis.type.JdbcType;
9   -//import org.apache.ibatis.type.MappedTypes;
10   -//
11   -//import java.sql.CallableStatement;
12   -//import java.sql.PreparedStatement;
13   -//import java.sql.ResultSet;
14   -//import java.sql.SQLException;
15   -//
16   -///**
17   -// * chat modal config
18   -// *
19   -// * @author fansili
20   -// * @time 2024/5/6 11:18
21   -// * @since 1.0
22   -// */
23   -//@MappedTypes(value = AiChatModalDO.Config.class)
24   -//public class AiChatModelConfigTypeHandler extends BaseTypeHandler<AiChatModalDO.Config> {
25   -//
26   -// @Override
27   -// public void setNonNullParameter(PreparedStatement ps, int i, AiChatModalDO.Config parameter, JdbcType jdbcType) throws SQLException {
28   -// // 将 MyCustomType 转换为数据库类型并设置到 PreparedStatement 中
29   -// if (parameter == null) {
30   -// ps.setString(i, "");
31   -// } else {
32   -// ps.setString(i, JsonUtils.toJsonString(parameter));
33   -// }
34   -// }
35   -//
36   -// @Override
37   -// public AiChatModalDO.Config getNullableResult(ResultSet rs, String columnName) throws SQLException {
38   -// // 从 ResultSet 中获取数据库类型并转换为 MyCustomType
39   -// String str = rs.getString(columnName);
40   -// if (StrUtil.isBlank(str)) {
41   -// return null;
42   -// }
43   -// AiChatModalDO.Config config = JsonUtils.parseObject(str, AiChatModalDO.Config.class);
44   -// // 获取平台
45   -// AiPlatformEnum platformEnum = AiPlatformEnum.valueOfPlatform(config.getModelPlatform());
46   -// if (AiPlatformEnum.CHAT_PLATFORM_LIST.contains(platformEnum)) {
47   -// return JsonUtils.parseObject(str, AiChatModalDO.ChatConfig.class);
48   -// } else if (AiPlatformEnum.OPEN_AI_DALL == platformEnum) {
49   -// return JsonUtils.parseObject(str, AiChatModalDO.OpenAiImageConfig.class);
50   -// } else if (AiPlatformEnum.MIDJOURNEY == platformEnum) {
51   -// return JsonUtils.parseObject(str, AiChatModalDO.MidjourneyConfig.class);
52   -// }
53   -// throw new IllegalArgumentException("ai模型中config不能转换! json: " + str);
54   -// }
55   -//
56   -// @Override
57   -// public AiChatModalDO.Config getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
58   -// // 从 ResultSet 中获取数据库类型并转换为 MyCustomType
59   -// String str = rs.getString(columnIndex);
60   -// if (StrUtil.isBlank(str)) {
61   -// return null;
62   -// }
63   -// return JsonUtils.parseObject(str, AiChatModalDO.Config.class);
64   -// }
65   -//
66   -// @Override
67   -// public AiChatModalDO.Config getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
68   -// // 从 CallableStatement 中获取数据库类型并转换为 MyCustomType
69   -// String str = cs.getString(columnIndex);
70   -// if (StrUtil.isBlank(str)) {
71   -// return null;
72   -// }
73   -// return JsonUtils.parseObject(str, AiChatModalDO.Config.class);
74   -// }
75   -//}
yudao-module-ai/yudao-module-ai-biz/src/main/resources/http/chat-conversation.http deleted
1   -
2   -### 登录 详细使用 https://www.jetbrains.com/help/idea/testing-restful-web-services.html、https://www.cnblogs.com/crazymakercircle/p/14317222.html
3   -
4   -
5   -### 对话 - list
6   -GET {{baseUrl}}/admin-api/ai/chat/conversation/list
7   -Authorization: {{token}}
8   -
9   -
10   -### 对话 - 创建对话
11   -POST {{baseUrl}}/admin-api/ai/chat/conversation/create
12   -Content-Type: application/json
13   -Authorization: {{token}}
14   -
15   -{
16   - "roleId": "9"
17   -}
18   -
19   -### 对话 - id获取
20   -GET {{baseUrl}}/admin-api/ai/chat/conversation/get?id=1781604279872581647
21   -Authorization: {{token}}
22   -
23   -
24   -### 对话 - 删除
25   -DELETE {{baseUrl}}/admin-api/ai/chat/conversation/delete?id=1781604279872581647
26   -Authorization: {{token}}
27   -
yudao-module-ai/yudao-module-ai-biz/src/main/resources/http/chat-modal.http deleted
1   -
2   -### chat call
3   -GET {{baseUrl}}/admin-api/ai/chat/model/list
4   -Authorization: {{token}}
5   -
6   -
7   -### chat call
8   -PUT {{baseUrl}}/admin-api/ai/chat/model/add
9   -Content-Type: application/json
10   -Authorization: {{token}}
11   -
12   -{
13   - "keyId": "1",
14   - "name": "小红书Ai写作大模型4.0",
15   - "model": "ERNIE 4.0",
16   - "platform": "yiyan",
17   - "sort": 100
18   -}
19   -
20   -### chat call
21   -POST {{baseUrl}}/admin-api/ai/chat/model/update
22   -Content-Type: application/json
23   -Authorization: {{token}}
24   -
25   -{
26   - "id": 9,
27   - "keyId": "1",
28   - "name": "小红书Ai写作大模型3.5 8k",
29   - "model": "ERNIE-3.5-8K",
30   - "platform": "yiyan",
31   - "sort": 100
32   -}
yudao-module-ai/yudao-module-ai-biz/src/main/resources/http/chat-role.http deleted
1   -
2   -### chat角色 - list
3   -GET {{baseUrl}}/admin-api/ai/chat/role/list?pageNo=1&pageSize=20&search=
4   -Authorization: {{token}}
5   -
6   -### chat add
7   -PUT {{baseUrl}}/admin-api/ai/chat/role/add
8   -Content-Type: application/json
9   -Authorization: {{token}}
10   -
11   -{
12   - "modelId": 9,
13   - "name": "小红书写作v1",
14   - "avatar": "http://baidu.com",
15   - "category": "writing",
16   - "description": "采用gpt3.5模型,拥有小红书优质作者写作经验。",
17   - "systemMessage": "你是一名优秀的小红书人文、风光作者,你热爱旅游,每去往一个城市你都会用美妙的文字抒写着这座城市的大街小巷,描述着这座城市的美好。",
18   - "publicStatus": 0,
19   - "sort": 0
20   -}
21   -
22   -
23   -### chat update
24   -POST {{baseUrl}}/admin-api/ai/chat/role/update
25   -Content-Type: application/json
26   -Authorization: {{token}}
27   -
28   -{
29   - "id": 8,
30   - "modelId": 9,
31   - "name": "小红书写作v2",
32   - "avatar": "http://baidu.com",
33   - "category": "writing",
34   - "description": "采用gpt3.5模型,拥有小红书优质作者写作经验。",
35   - "systemMessage": "你是一名优秀的小红书人文、风光作者,你热爱旅游,每去往一个城市你都会用美妙的文字抒写着这座城市的大街小巷,描述着这座城市的美好。",
36   - "publicStatus": 0,
37   - "sort": 0,
38   - "status": 0
39   -}
40   -
41   -### chat update
42   -POST {{baseUrl}}/admin-api/ai/chat/role/update-public-status
43   -Content-Type: application/json
44   -Authorization: {{token}}
45   -
46   -{
47   - "id": "8",
48   - "publicStatus": true
49   -}
50   -
51   -
52   -### chat update
53   -DELETE {{baseUrl}}/admin-api/ai/chat/role/delete?id=8
54   -Authorization: {{token}}
55   -
56   -
yudao-module-ai/yudao-module-ai-biz/src/main/resources/http/http-client.env.json deleted
1   -{
2   - "global": {
3   - "token": "--"
4   - },
5   - "dev": {
6   - "baseUrl": "http://127.0.0.1:48080",
7   - "token": "Bearer 66346cc899e243b081321bd1336a257a"
8   - }
9   -}
10 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/resources/http/login.http deleted
1   -
2   -
3   -### 登录
4   -
5   -POST {{baseUrl}}/admin-api/system/auth/login
6   -Content-Type: application/json
7   -tenant-id: 1
8   -
9   -{
10   - "username": "admin",
11   - "password": "123456",
12   - "captchaVerification": "PfcH6mgr8tpXuMWFjvW6YVaqrswIuwmWI5dsVZSg7sGpWtDCUbHuDEXl3cFB1+VvCC/rAkSwK8Fad52FSuncVg==",
13   - "socialCode": "1024",
14   - "socialState": "9b2ffbc1-7425-4155-9894-9d5c08541d62",
15   - "socialCodeValid": true
16   -}
17   -
18   -
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
1 1 package cn.iocoder.yudao.framework.ai.config;
2 2  
3   -import cn.hutool.core.io.IoUtil;
4 3 import cn.iocoder.yudao.framework.ai.core.factory.AiClientFactory;
5 4 import cn.iocoder.yudao.framework.ai.core.factory.AiClientFactoryImpl;
6 5 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
... ... @@ -15,24 +14,10 @@ import cn.iocoder.yudao.framework.ai.core.model.yiyan.YiYanChatClient;
15 14 import cn.iocoder.yudao.framework.ai.core.model.yiyan.YiYanChatOptions;
16 15 import cn.iocoder.yudao.framework.ai.core.model.yiyan.api.YiYanApi;
17 16 import lombok.extern.slf4j.Slf4j;
18   -import org.jetbrains.annotations.NotNull;
19   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
20   -import org.springframework.ai.models.midjourney.MidjourneyMessage;
21   -import org.springframework.ai.models.midjourney.api.MidjourneyInteractionsApi;
22   -import org.springframework.ai.models.midjourney.webSocket.MidjourneyMessageHandler;
23   -import org.springframework.ai.models.midjourney.webSocket.MidjourneyWebSocketStarter;
24   -import org.springframework.ai.models.midjourney.webSocket.listener.MidjourneyMessageListener;
25 17 import org.springframework.boot.autoconfigure.AutoConfiguration;
26   -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27 18 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
28 19 import org.springframework.boot.context.properties.EnableConfigurationProperties;
29   -import org.springframework.context.ApplicationContext;
30 20 import org.springframework.context.annotation.Bean;
31   -import org.springframework.core.io.Resource;
32   -
33   -import java.io.IOException;
34   -import java.util.HashMap;
35   -import java.util.Map;
36 21  
37 22 /**
38 23 * 芋道 AI 自动配置
... ... @@ -112,62 +97,9 @@ public class YudaoAiAutoConfiguration {
112 97 }
113 98  
114 99 @Bean
115   - @ConditionalOnMissingBean(value = MidjourneyMessageHandler.class)
116   - public MidjourneyMessageHandler defaultMidjourneyMessageHandler() {
117   - // 如果没有实现 MidjourneyMessageHandler 默认注入一个
118   - return new MidjourneyMessageHandler() {
119   - @Override
120   - public void messageHandler(MidjourneyMessage midjourneyMessage) {
121   - log.info("default midjourney message: {}", midjourneyMessage);
122   - }
123   - };
124   - }
125   -
126   - @Bean
127   - @ConditionalOnProperty(value = "yudao.ai.midjourney.enable", havingValue = "true")
128   - public MidjourneyWebSocketStarter midjourneyWebSocketStarter(ApplicationContext applicationContext,
129   - MidjourneyMessageHandler midjourneyMessageHandler,
130   - YudaoAiProperties yudaoAiProperties) {
131   - // 获取 midjourneyProperties
132   - YudaoAiProperties.MidjourneyProperties midjourneyProperties = yudaoAiProperties.getMidjourney();
133   - // 获取 midjourneyConfig
134   - MidjourneyConfig midjourneyConfig = getMidjourneyConfig(applicationContext, midjourneyProperties);
135   - // 创建 socket messageListener
136   - MidjourneyMessageListener messageListener = new MidjourneyMessageListener(midjourneyConfig, midjourneyMessageHandler);
137   - // 创建 MidjourneyWebSocketStarter
138   - return new MidjourneyWebSocketStarter(midjourneyProperties.getWssUrl(), null, midjourneyConfig, messageListener);
139   - }
140   -
141   - @Bean
142   - @ConditionalOnProperty(value = "yudao.ai.midjourney.enable", havingValue = "true")
143   - public MidjourneyInteractionsApi midjourneyInteractionsApi(ApplicationContext applicationContext, YudaoAiProperties yudaoAiProperties) {
144   - // 获取 midjourneyConfig
145   - MidjourneyConfig midjourneyConfig = getMidjourneyConfig(applicationContext, yudaoAiProperties.getMidjourney());
146   - // 创建 MidjourneyInteractionsApi
147   - return new MidjourneyInteractionsApi(midjourneyConfig);
148   - }
149   -
150   - @Bean
151 100 @ConditionalOnProperty(value = "yudao.ai.suno.enable", havingValue = "true")
152 101 public SunoApi sunoApi(YudaoAiProperties yudaoAiProperties) {
153 102 return new SunoApi(yudaoAiProperties.getSuno().getBaseUrl());
154 103 }
155 104  
156   - private static @NotNull MidjourneyConfig getMidjourneyConfig(ApplicationContext applicationContext,
157   - YudaoAiProperties.MidjourneyProperties midjourneyProperties) {
158   - Map<String, String> requestTemplates = new HashMap<>();
159   - try {
160   - Resource[] resources = applicationContext.getResources("classpath:http-body/*.json");
161   - for (var resource : resources) {
162   - String filename = resource.getFilename();
163   - String params = IoUtil.readUtf8(resource.getInputStream());
164   - requestTemplates.put(filename.substring(0, filename.length() - 5), params);
165   - }
166   - } catch (IOException e) {
167   - throw new IllegalArgumentException("Midjourney json模板初始化出错! " + e.getMessage());
168   - }
169   - // 创建 midjourneyConfig
170   - return new MidjourneyConfig(midjourneyProperties.getToken(),
171   - midjourneyProperties.getGuildId(), midjourneyProperties.getChannelId(), requestTemplates);
172   - }
173 105 }
174 106 \ No newline at end of file
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/MidjourneyConfig.java deleted
1   -package org.springframework.ai.models.midjourney;
2   -
3   -import lombok.Data;
4   -import lombok.experimental.Accessors;
5   -
6   -import java.util.Map;
7   -import java.util.UUID;
8   -
9   -/**
10   - * Midjourney 配置
11   - *
12   - * author: fansili
13   - * time: 2024/4/3 17:10
14   - */
15   -@Data
16   -@Accessors(chain = true)
17   -public class MidjourneyConfig {
18   -
19   - /**
20   - * token信息
21   - *
22   - * tip: 登录discard F12找 messages 接口
23   - */
24   - private String token;
25   - /**
26   - * 服务器id
27   - */
28   - private String guildId;
29   - /**
30   - * 频道id
31   - */
32   - private String channelId;
33   -
34   - //
35   - // api 接口
36   -
37   - /**
38   - * 服务地址
39   - */
40   - private String serverUrl = "https://discord.com/";
41   - /**
42   - * 发送命令
43   - */
44   - private String apiInteractions = "api/v9/interactions";
45   - /**
46   - * 附件
47   - */
48   - private String apiAttachments = "/api/v9/channels/%s/attachments";
49   - /**
50   - * 文件上传
51   - */
52   - private String apiAttachmentsUpload = "https://discord-attachments-uploads-prd.storage.googleapis.com/";
53   -
54   - //
55   - // 浏览器配置
56   -
57   - private String userAage = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
58   -
59   - //
60   - // 请求 json 文件
61   -
62   -
63   - private Map<String, String> requestTemplates;
64   -
65   - //
66   - //
67   -
68   - private String sessionId;
69   -
70   - public MidjourneyConfig(String token, String guildId, String channelId, Map<String, String> requestTemplates) {
71   - this.token = token;
72   - this.guildId = guildId;
73   - this.channelId = channelId;
74   - this.requestTemplates = requestTemplates;
75   -
76   - // 生成 session id
77   - sessionId = UUID.randomUUID().toString().replaceAll("-", "");
78   - }
79   -
80   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/MidjourneyMessage.java deleted
1   -package org.springframework.ai.models.midjourney;
2   -
3   -import org.springframework.ai.models.midjourney.constants.MidjourneyGennerateStatusEnum;
4   -import lombok.Data;
5   -import lombok.experimental.Accessors;
6   -
7   -import java.util.List;
8   -
9   -@Data
10   -@Accessors(chain = true)
11   -public class MidjourneyMessage {
12   -
13   - /**
14   - * id是一个重要的字段,在同时生成多个的时候,可以区分生成信息
15   - */
16   - private String id;
17   - /**
18   - * 提交id(nonce 可能会不存在,系统提示的时候,这个为空)
19   - */
20   - private String nonce;
21   - /**
22   - * 现在已知:
23   - * 0:我们发送的消息,和指令
24   - * 20: mj生成图片发送过程中
25   - * 19: 选择了某一张图片后的通知
26   - */
27   - private Integer type;
28   - /**
29   - * content
30   - */
31   - private Content content;
32   - /**
33   - * 图片生成完成才有
34   - */
35   - private List<ComponentType> components;
36   - /**
37   - * 生成过程中如果有,预展示图片,这里会有
38   - */
39   - private List<Attachment> attachments;
40   - /**
41   - * 原始数据(discard 返回的原始数据)
42   - */
43   - private String rawData;
44   - /**
45   - * 生成状态(用于区分生成状态)
46   - * 1、等待
47   - * 2、进行中
48   - * 3、完成
49   - * {@link MidjourneyGennerateStatusEnum}
50   - */
51   - private String generateStatus;
52   - /**
53   - * 一般用于提示信息
54   - * - 错误
55   - * - 并发队列满了
56   - * - 账号违规了、敏感词
57   - * - 账号被封
58   - */
59   - private List<Embed> embeds;
60   -
61   - @Data
62   - @Accessors(chain = true)
63   - public static class ComponentType {
64   -
65   - private int type;
66   -
67   - private List<Component> components;
68   - }
69   -
70   - @Data
71   - @Accessors(chain = true)
72   - public static class Component {
73   - /**
74   - * 自定义ID,用于唯一标识特定交互动作及其上下文信息。
75   - */
76   - private String customId;
77   -
78   - /**
79   - * 样式编号,用于确定按钮的样式外观。
80   - * 在某些应用中,例如Discord,2可能表示一种特定的颜色或形状的按钮。
81   - */
82   - private int style;
83   -
84   - /**
85   - * 按钮的标签文本,用户可见的内容。
86   - */
87   - private String label;
88   -
89   - /**
90   - * 组件类型,此处为2可能表示这是一种特定类型的交互组件,
91   - * 如在Discord API中,类型2对应的是一个可点击的按钮组件。
92   - */
93   - private int type;
94   -
95   - }
96   -
97   - @Data
98   - @Accessors(chain = true)
99   - public static class Attachment {
100   - // 文件名
101   - private String filename;
102   -
103   - // 附件大小(字节)
104   - private int size;
105   -
106   - // 内容类型(例如:image/webp)
107   - private String contentType;
108   -
109   - // 图像宽度(像素)
110   - private int width;
111   -
112   - // 占位符版本号
113   - private int placeholderVersion;
114   -
115   - // 代理URL,用于访问附件资源
116   - private String proxyUrl;
117   -
118   - // 占位符标识符
119   - private String placeholder;
120   -
121   - // 附件ID
122   - private String id;
123   -
124   - // 直接访问附件资源的URL
125   - private String url;
126   -
127   - // 图像高度(像素)
128   - private int height;
129   - }
130   -
131   - @Data
132   - @Accessors(chain = true)
133   - public static class Content {
134   - private String prompt;
135   - private String progress;
136   - private String status;
137   - }
138   -
139   - /**
140   - * embed 用于警告、提示、错误
141   - */
142   - @Data
143   - @Accessors(chain = true)
144   - public static class Embed {
145   -
146   - // 内容扫描版本号
147   - private int contentScanVersion;
148   -
149   - // 颜色值,这里用Java的Color类来表示,注意实际使用中可能需要自定义方法来从int转换为Color对象
150   - private String color;
151   -
152   - // 页脚信息,包含文本
153   - private Footer footer;
154   -
155   - // 描述信息
156   - private String description;
157   -
158   - // 消息类型,这里是富文本类型(这个区分不同提示类型)
159   - private String type;
160   -
161   - // 标题
162   - private String title;
163   -
164   - // Footer类,作为嵌套类存在,用来表示footer部分的JSON对象
165   - @Data
166   - @Accessors(chain = true)
167   - public static class Footer {
168   - // 页脚文本
169   - private String text;
170   - }
171   -
172   - }
173   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/MidjourneyInteractions.java deleted
1   -package org.springframework.ai.models.midjourney.api;
2   -
3   -import cn.hutool.core.util.IdUtil;
4   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
5   -import org.springframework.ai.models.midjourney.constants.MidjourneyConstants;
6   -import com.google.common.collect.Maps;
7   -import lombok.extern.slf4j.Slf4j;
8   -import org.springframework.http.HttpHeaders;
9   -import org.springframework.http.MediaType;
10   -
11   -import java.util.HashMap;
12   -
13   -// TODO @fansili:按照 spring ai 的封装习惯,这个类是不是 MidjourneyApi
14   -
15   -/**
16   - * 图片生成
17   - *
18   - * author: fansili
19   - * time: 2024/4/3 17:36
20   - */
21   -@Slf4j
22   -public abstract class MidjourneyInteractions {
23   -
24   - // TODO done @fansili:静态变量,放在最前面哈;
25   - /**
26   - * header - referer 头信息
27   - */
28   - private static final String HEADER_REFERER = "https://discord.com/channels/%s/%s";
29   - /**
30   - * mj配置文件
31   - */
32   - protected final MidjourneyConfig midjourneyConfig;
33   -
34   - protected MidjourneyInteractions(MidjourneyConfig midjourneyConfig) {
35   - this.midjourneyConfig = midjourneyConfig;
36   - }
37   -
38   - /**
39   - * 获取headers - application json
40   - *
41   - * @return
42   - */
43   - protected HttpHeaders getHeadersOfAppJson() {
44   - // 设置header值
45   - HttpHeaders httpHeaders = new HttpHeaders();
46   - httpHeaders.setContentType(MediaType.APPLICATION_JSON);
47   - httpHeaders.set("Authorization", midjourneyConfig.getToken());
48   - httpHeaders.set("User-Agent", midjourneyConfig.getUserAage());
49   - httpHeaders.set("Cookie", MidjourneyConstants.HTTP_COOKIE);
50   - httpHeaders.set("Referer", String.format(HEADER_REFERER, midjourneyConfig.getGuildId(), midjourneyConfig.getChannelId()));
51   - return httpHeaders;
52   - }
53   -
54   - /**
55   - * 获取headers - http form data
56   - *
57   - * @return
58   - */
59   - protected HttpHeaders getHeadersOfFormData() {
60   - // 设置header值
61   - HttpHeaders httpHeaders = new HttpHeaders();
62   - httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
63   - httpHeaders.set("Authorization", midjourneyConfig.getToken());
64   - httpHeaders.set("User-Agent", midjourneyConfig.getUserAage());
65   - httpHeaders.set("Cookie", MidjourneyConstants.HTTP_COOKIE);
66   - httpHeaders.set("Referer", String.format(HEADER_REFERER, midjourneyConfig.getGuildId(), midjourneyConfig.getChannelId()));
67   - return httpHeaders;
68   - }
69   -
70   - /**
71   - * 获取 - 默认参数
72   - * @return
73   - */
74   - protected HashMap<String, String> getDefaultParams() {
75   - HashMap<String, String> requestParams = Maps.newHashMap();
76   - // TODO done @fansili:感觉参数的组装,可以搞成一个公用的方法;就是 config + 入参的感觉;
77   - requestParams.put("guild_id", midjourneyConfig.getGuildId());
78   - requestParams.put("channel_id", midjourneyConfig.getChannelId());
79   - requestParams.put("session_id", midjourneyConfig.getSessionId());
80   - requestParams.put("nonce", String.valueOf(IdUtil.getSnowflakeNextId())); // TODO @fansili:建议用 uuid 之类的;nextId 跨进程未必合适哈;
81   - return requestParams;
82   - }
83   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/MidjourneyInteractionsApi.java deleted
1   -package org.springframework.ai.models.midjourney.api;
2   -
3   -import cn.hutool.core.util.StrUtil;
4   -import com.alibaba.fastjson.JSON;
5   -import com.alibaba.fastjson.JSONObject;
6   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
7   -import org.springframework.ai.models.midjourney.api.req.AttachmentsReq;
8   -import org.springframework.ai.models.midjourney.api.req.DescribeReq;
9   -import org.springframework.ai.models.midjourney.api.req.ReRollReq;
10   -import org.springframework.ai.models.midjourney.api.res.UploadAttachmentsRes;
11   -import org.springframework.ai.models.midjourney.util.MidjourneyUtil;
12   -import com.google.common.collect.Lists;
13   -import lombok.extern.slf4j.Slf4j;
14   -import org.springframework.core.io.FileSystemResource;
15   -import org.springframework.http.*;
16   -import org.springframework.util.LinkedMultiValueMap;
17   -import org.springframework.util.MultiValueMap;
18   -import org.springframework.web.client.RestTemplate;
19   -
20   -import java.io.IOException;
21   -import java.util.HashMap;
22   -
23   -// TODO @fansili:按照 spring ai 的封装习惯,这个类是不是 MidjourneyApi
24   -/**
25   - * 图片生成
26   - *
27   - * author: fansili
28   - * time: 2024/4/3 17:36
29   - */
30   -@Slf4j
31   -public class MidjourneyInteractionsApi extends MidjourneyInteractions {
32   -
33   - private final String url;
34   - private final RestTemplate restTemplate = new RestTemplate(); // TODO @fansili:优先级低:后续搞到统一的管理
35   -
36   - public MidjourneyInteractionsApi(MidjourneyConfig midjourneyConfig) {
37   - super(midjourneyConfig);
38   - this.url = midjourneyConfig.getServerUrl().concat(midjourneyConfig.getApiInteractions());
39   - }
40   -
41   - public Boolean imagine(String nonce, String prompt) {
42   - // 获取请求模板
43   - String requestTemplate = midjourneyConfig.getRequestTemplates().get("imagine");
44   - // 设置参数
45   - HashMap<String, String> requestParams = getDefaultParams();
46   - requestParams.put("nonce", nonce);
47   - requestParams.put("prompt", prompt);
48   - // 解析 template 参数占位符
49   - String requestBody = MidjourneyUtil.parseTemplate(requestTemplate, requestParams);
50   - // 获取 header
51   - HttpHeaders httpHeaders = getHeadersOfAppJson();
52   - // 发送请求
53   - HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, httpHeaders);
54   - String res = restTemplate.postForObject(url, requestEntity, String.class);
55   - // 这个 res 只要不返回值,就是成功!
56   - // TODO @fansili:可以直接 if (StrUtil.isBlank(res))
57   - if (StrUtil.isBlank(res)) {
58   - return true;
59   - } else {
60   - log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res);
61   - return false;
62   - }
63   - }
64   - // TODO done @fansili:方法和方法之间,空一行哈;
65   -
66   -
67   - public Boolean reRoll(ReRollReq reRoll) {
68   - // 获取请求模板
69   - String requestTemplate = midjourneyConfig.getRequestTemplates().get("reroll");
70   - // 设置参数
71   - HashMap<String, String> requestParams = getDefaultParams();
72   - requestParams.put("custom_id", reRoll.getCustomId());
73   - requestParams.put("message_id", reRoll.getMessageId());
74   - // 获取 header
75   - HttpHeaders httpHeaders = getHeadersOfAppJson();
76   - // 设置参数
77   - String requestBody = MidjourneyUtil.parseTemplate(requestTemplate, requestParams);
78   - // 发送请求
79   - HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, httpHeaders);
80   - String res = restTemplate.postForObject(url, requestEntity, String.class);
81   - // 这个 res 只要不返回值,就是成功!
82   - boolean isSuccess = StrUtil.isBlank(res);
83   - if (isSuccess) {
84   - return true;
85   - }
86   - log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res);
87   - return isSuccess;
88   - }
89   -
90   - // TODO @fansili:搞成私有方法,可能会好点;
91   - public UploadAttachmentsRes uploadAttachments(AttachmentsReq attachments) {
92   - // file
93   - JSONObject fileObj = new JSONObject();
94   - fileObj.put("id", "0");
95   - fileObj.put("filename", attachments.getFileSystemResource().getFilename());
96   - // TODO @fansili:这块用 lombok 哪个异常处理,简化下代码;
97   - try {
98   - fileObj.put("file_size", attachments.getFileSystemResource().contentLength());
99   - } catch (IOException e) {
100   - throw new RuntimeException(e);
101   - }
102   - // 创建用于存放表单数据的MultiValueMap
103   - MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
104   - multipartRequest.put("files", Lists.newArrayList(fileObj));
105   - // 设置header值
106   - HttpHeaders httpHeaders = getHeadersOfAppJson();
107   - // 创建HttpEntity对象,包含表单数据和头部信息
108   - HttpEntity<MultiValueMap<String, Object>> multiValueMapHttpEntity = new HttpEntity<>(multipartRequest, httpHeaders);
109   - // 发送POST请求并接收响应
110   - String uri = String.format(midjourneyConfig.getApiAttachments(), midjourneyConfig.getChannelId());
111   - String response = restTemplate.postForObject(midjourneyConfig.getServerUrl().concat(uri), multiValueMapHttpEntity, String.class);
112   - UploadAttachmentsRes uploadAttachmentsRes = JSON.parseObject(response, UploadAttachmentsRes.class);
113   -
114   - //
115   - // 上传文件
116   - String uploadUrl = uploadAttachmentsRes.getAttachments().get(0).getUploadUrl();
117   - httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
118   - HttpEntity<FileSystemResource> fileSystemResourceHttpEntity = new HttpEntity<>(attachments.getFileSystemResource(), httpHeaders);
119   - ResponseEntity<String> exchange = restTemplate.exchange(uploadUrl, HttpMethod.PUT, fileSystemResourceHttpEntity, String.class);
120   - String uploadRes = exchange.getBody();
121   - return uploadAttachmentsRes;
122   - }
123   -
124   - public Boolean describe(DescribeReq describe) {
125   - // 获取请求模板
126   - String requestTemplate = midjourneyConfig.getRequestTemplates().get("describe");
127   - // 设置参数
128   - HashMap<String, String> requestParams = getDefaultParams();
129   - requestParams.put("file_name", describe.getFileName());
130   - requestParams.put("final_file_name", describe.getFinalFileName());
131   - // 设置 header
132   - HttpHeaders httpHeaders = getHeadersOfFormData();
133   - String requestBody = MidjourneyUtil.parseTemplate(requestTemplate, requestParams);
134   - // 创建表单数据
135   - MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
136   - formData.add("payload_json", requestBody);
137   - // 发送请求
138   - HttpEntity<MultiValueMap<String, String>> multiValueMapHttpEntity = new HttpEntity<>(formData, httpHeaders);
139   - String res = restTemplate.postForObject(url, multiValueMapHttpEntity, String.class);
140   - // 这个 res 只要不返回值,就是成功!
141   - boolean isSuccess = StrUtil.isBlank(res);
142   - if (isSuccess) {
143   - return true;
144   - }
145   - log.error("请求失败! 请求参数:{} 返回结果! {}", requestBody, res);
146   - return isSuccess;
147   - }
148   -
149   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/req/AttachmentsReq.java deleted
1   -package org.springframework.ai.models.midjourney.api.req;
2   -
3   -import lombok.Data;
4   -import lombok.experimental.Accessors;
5   -import org.springframework.core.io.FileSystemResource;
6   -
7   -/**
8   - * 附件
9   - * <p>
10   - * author: fansili
11   - * time: 2024/4/7 17:18
12   - */
13   -@Data
14   -@Accessors(chain = true)
15   -public class AttachmentsReq {
16   -
17   - /**
18   - * 创建文件系统资源对象
19   - */
20   - private FileSystemResource fileSystemResource;
21   -
22   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/req/DescribeReq.java deleted
1   -package org.springframework.ai.models.midjourney.api.req;
2   -
3   -import lombok.Data;
4   -import lombok.experimental.Accessors;
5   -
6   -/**
7   - * describe
8   - *
9   - * author: fansili
10   - * time: 2024/4/7 12:30
11   - */
12   -@Data
13   -@Accessors(chain = true)
14   -public class DescribeReq {
15   -
16   - /**
17   - * 文件名字
18   - */
19   - private String fileName;
20   - /**
21   - * UploadAttachmentsRes 里面的 finalFileName
22   - */
23   - private String finalFileName;
24   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/req/ReRollReq.java deleted
1   -package org.springframework.ai.models.midjourney.api.req;
2   -
3   -import lombok.Data;
4   -import lombok.experimental.Accessors;
5   -
6   -/**
7   - * author: fansili
8   - * time: 2024/4/6 21:33
9   - */
10   -@Data
11   -@Accessors(chain = true)
12   -public class ReRollReq {
13   -
14   - /**
15   - * socket 消息里面收到的 messageId
16   - */
17   - private String messageId;
18   - /**
19   - * socket 消息里面的,操作按钮id(MJ::JOB::upsample::3::2aeefbef-43e2-4057-bcf1-43b5f39ab6f7)
20   - */
21   - private String customId;
22   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/api/res/UploadAttachmentsRes.java deleted
1   -package org.springframework.ai.models.midjourney.api.res;
2   -
3   -import lombok.Data;
4   -import lombok.experimental.Accessors;
5   -
6   -import java.util.List;
7   -
8   -/**
9   - * 上传附件 - res
10   - *
11   - * author: fansili
12   - * time: 2024/4/8 13:32
13   - */
14   -@Data
15   -@Accessors(chain = true)
16   -public class UploadAttachmentsRes {
17   -
18   - private List<Attachment> attachments;
19   -
20   - @Data
21   - @Accessors(chain = true)
22   - public static class Attachment {
23   - /**
24   - * 附件的ID。
25   - */
26   - private int id;
27   - /**
28   - * 附件的上传URL。
29   - */
30   - private String uploadUrl;
31   - /**
32   - * 上传到服务器的文件名。
33   - */
34   - private String uploadFilename;
35   - }
36   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/constants/MidjourneyConstants.java deleted
1   -package org.springframework.ai.models.midjourney.constants;
2   -
3   -public final class MidjourneyConstants {
4   -
5   - /**
6   - * 消息 - 编号
7   - */
8   - public static final String MSG_ID = "id";
9   - /**
10   - * 用于区分操作唯一性
11   - */
12   - public static final String MSG_NONCE = "nonce";
13   - /**
14   - * 消息 - 类型
15   - * 现在已知:
16   - * 0:我们发送的消息,和指令
17   - * 20: mj生成图片发送过程中
18   - * 19: 选择了某一张图片后的通知
19   - */
20   - public static final String MSG_TYPE = "type";
21   - /**
22   - * 平道id
23   - */
24   - public static final String MSG_CHANNEL_ID = "channel_id";
25   - /**
26   - * 内容
27   - *
28   - * "**南极应该是什么样子? --v 6.0 --style raw** - <@972721304891453450> (32%) (fast, stealth)",
29   - */
30   - public static final String MSG_CONTENT = "content";
31   - /**
32   - * 组件(图片生成好之后才有)
33   - */
34   - public static final String MSG_COMPONENTS = "components";
35   - /**
36   - * 附件(生成中比较模糊的图片)
37   - */
38   - public static final String MSG_ATTACHMENTS = "attachments";
39   - /**
40   - * 一般用于提示
41   - */
42   - public static final String MSG_EMBEDS = "embeds";
43   -
44   -
45   - //
46   - //
47   -
48   - public static final String HTTP_COOKIE = "__dcfduid=6ca536c0e3fa11eeb7cbe34c31b49caf; __sdcfduid=6ca536c1e3fa11eeb7cbe34c31b49caf52cce5ffd8983d2a052cf6aba75fe5fe566f2c265902e283ce30dbf98b8c9c93; _gcl_au=1.1.245923998.1710853617; _ga=GA1.1.111061823.1710853617; __cfruid=6385bb3f48345a006b25992db7dcf984e395736d-1712124666; _cfuvid=O09la5ms0ypNptiG0iD8A6BKWlTxz1LG0WR7qRStD7o-1712124666575-0.0.1.1-604800000; locale=zh-CN; cf_clearance=l_YGod1_SUtYxpDVeZXiX7DLLPl1DYrquZe8WVltvYs-1712124668-1.0.1.1-Hl2.fToel23EpF2HCu9J20rB4D7OhhCzoajPSdo.9Up.wPxhvq22DP9RHzEBKuIUlKyH.kJLxXJfAt2N.LD5WQ; OptanonConsent=isIABGlobal=false&datestamp=Wed+Apr+03+2024+14%3A11%3A15+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=6.33.0&hosts=&landingPath=https%3A%2F%2Fdiscord.com%2F&groups=C0001%3A1%2CC0002%3A1%2CC0003%3A1; _ga_Q149DFWHT7=GS1.1.1712124668.4.1.1712124679.0.0.0";
49   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/constants/MidjourneyGennerateStatusEnum.java deleted
1   -package org.springframework.ai.models.midjourney.constants;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Getter;
5   -
6   -// TODO done @fansili:1)Mj 缩写,还是搞成全称。。虽然长一点,但是感觉会相对清晰一些哈;2)lombok 相关的注解,可以用用哈;3)value 改 status;
7   -/**
8   - * mj 生成状态
9   - *
10   - * author: fansili
11   - * time: 2024/4/6 21:07
12   - */
13   -@Getter
14   -@AllArgsConstructor
15   -public enum MidjourneyGennerateStatusEnum {
16   -
17   - WAITING("waiting", "等待..."),
18   - IN_PROGRESS("in_progress", "进行中"),
19   - COMPLETED("completed", "完成"),
20   -
21   - ;
22   -
23   - /**
24   - * 状态
25   - */
26   - private String status;
27   - /**
28   - * 状态信息
29   - */
30   - private String message;
31   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/constants/MidjourneyInteractionsEnum.java deleted
1   -package org.springframework.ai.models.midjourney.constants;
2   -
3   -import lombok.Getter;
4   -
5   -/**
6   - * MJ 命令
7   - */
8   -@Getter
9   -public enum MidjourneyInteractionsEnum {
10   -
11   - IMAGINE("imagine", "生成图片"),
12   - DESCRIBE("describe", "生成描述"),
13   - FAST("fast", "快速生成"),
14   - SETTINGS("settings", "设置"),
15   - ASK("ask", "提问"),
16   - BLEND("blend", "融合"),
17   -
18   - ;
19   -
20   - MidjourneyInteractionsEnum(String value, String message) {
21   - this.value =value;
22   - this.message =message;
23   - }
24   -
25   - private String value;
26   - private String message;
27   -
28   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/constants/MidjourneyMessageTypeEnum.java deleted
1   -package org.springframework.ai.models.midjourney.constants;
2   -
3   -
4   -public enum MidjourneyMessageTypeEnum {
5   - /**
6   - * 创建.
7   - */
8   - CREATE,
9   - /**
10   - * 修改.
11   - */
12   - UPDATE,
13   - /**
14   - * 删除.
15   - */
16   - DELETE;
17   -
18   - public static MidjourneyMessageTypeEnum of(String type) {
19   - return switch (type) {
20   - case "MESSAGE_CREATE" -> CREATE;
21   - case "MESSAGE_UPDATE" -> UPDATE;
22   - case "MESSAGE_DELETE" -> DELETE;
23   - default -> null;
24   - };
25   - }
26   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/constants/MidjourneyNotifyCode.java deleted
1   -package org.springframework.ai.models.midjourney.constants;
2   -
3   -import lombok.experimental.UtilityClass;
4   -
5   -@UtilityClass
6   -public final class MidjourneyNotifyCode {
7   - /**
8   - * 成功.
9   - */
10   - public static final int SUCCESS = 1;
11   -
12   -
13   -
14   -}
15 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/util/MidjourneyUtil.java deleted
1   -package org.springframework.ai.models.midjourney.util;
2   -
3   -import cn.hutool.core.text.CharSequenceUtil;
4   -import org.springframework.ai.models.midjourney.MidjourneyMessage;
5   -
6   -import java.util.Map;
7   -import java.util.regex.Matcher;
8   -import java.util.regex.Pattern;
9   -
10   -/**
11   - * mj util
12   - *
13   - * author: fansili
14   - * time: 2024/4/6 19:00
15   - */
16   -public class MidjourneyUtil {
17   - /**
18   - * content正则匹配prompt和进度.
19   - */
20   - public static final String CONTENT_REGEX = ".*?\\*\\*(.*?)\\*\\*.+<@\\d+> \\((.*?)\\)";
21   - public static final String CONTENT_PROGRESS_REGEX = "\\(([^)]*)\\)";
22   -
23   - /**
24   - * 解析 content 参数
25   - *
26   - * @param content
27   - * @return
28   - */
29   - public static MidjourneyMessage.Content parseContent(String content) {
30   - // 有三种格式。
31   - // 南极应该是什么样子?
32   - // "**南极应该是什么样子? --v 6.0 --style raw** - <@972721304891453450> (32%) (fast, stealth)",
33   - // "**南极应该是什么样子? --v 6.0 --style raw** - <@972721304891453450> (fast, stealth)"
34   - // Upscaling image #3 with **A girl from China, creator of ancient Chinese clothing, dances on the square** - <@975372485971312700> (Waiting to start)
35   - MidjourneyMessage.Content mjContent = new MidjourneyMessage.Content();
36   - if (CharSequenceUtil.isBlank(content)) {
37   - return null;
38   - }
39   - if (!content.contains("<@")) {
40   - return mjContent.setPrompt(content);
41   - }
42   - int rawIndex = content.indexOf("<@") - 3;
43   - String prompt = content.substring(0, rawIndex).trim();
44   - String contentTail = content.substring(rawIndex).trim();
45   - // 检查是否存在进度条
46   - Pattern pattern = Pattern.compile(CONTENT_PROGRESS_REGEX);
47   - Matcher matcher = pattern.matcher(contentTail);
48   -
49   - if (contentTail.contains("%")) {
50   - if (matcher.find()) {
51   - // 获取第一个(也是此处唯一的)捕获组的内容
52   - String progress = matcher.group(1);
53   - mjContent.setProgress(progress);
54   - }
55   - if (matcher.find()) {
56   - String status = matcher.group(1);
57   - mjContent.setStatus(status);
58   - }
59   - } else {
60   - if (matcher.find()) {
61   - // 获取第一个(也是此处唯一的)捕获组的内容
62   - String status = matcher.group(1);
63   - mjContent.setStatus(status);
64   - }
65   - }
66   - mjContent.setPrompt(prompt);
67   - // tip:contentArray
68   - return mjContent;
69   - }
70   -
71   - /**
72   - * 设置 params
73   - *
74   - * @param requestTemplate
75   - * @param requestParams
76   - * @return
77   - */
78   - public static String parseTemplate(String requestTemplate, Map<String, String> requestParams) {
79   - for (Map.Entry<String, String> entry : requestParams.entrySet()) {
80   - requestTemplate = requestTemplate.replace("$".concat(entry.getKey()), entry.getValue());
81   - }
82   - return requestTemplate;
83   - }
84   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/FailureCallback.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -
4   -public interface FailureCallback {
5   - void onFailure(int code, String reason);
6   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/MidjourneyMessageHandler.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -import org.springframework.ai.models.midjourney.MidjourneyMessage;
4   -
5   -/**
6   - * message handler
7   - *
8   - * @author fansili
9   - * @time 2024/4/29 14:29
10   - * @since 1.0
11   - */
12   -public interface MidjourneyMessageHandler {
13   -
14   - void messageHandler(MidjourneyMessage midjourneyMessage);
15   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/MidjourneyWebSocketStarter.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -
4   -import cn.hutool.core.text.CharSequenceUtil;
5   -import cn.hutool.core.thread.ThreadUtil;
6   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
7   -import org.springframework.ai.models.midjourney.constants.MidjourneyNotifyCode;
8   -import org.springframework.ai.models.midjourney.webSocket.handler.MidjourneyWebSocketHandler;
9   -import org.springframework.ai.models.midjourney.webSocket.listener.MidjourneyMessageListener;
10   -import lombok.Getter;
11   -import lombok.extern.slf4j.Slf4j;
12   -import org.apache.tomcat.websocket.Constants;
13   -import org.jetbrains.annotations.NotNull;
14   -import org.springframework.util.concurrent.ListenableFuture;
15   -import org.springframework.util.concurrent.ListenableFutureCallback;
16   -import org.springframework.web.socket.CloseStatus;
17   -import org.springframework.web.socket.WebSocketHttpHeaders;
18   -import org.springframework.web.socket.WebSocketSession;
19   -import org.springframework.web.socket.client.standard.StandardWebSocketClient;
20   -
21   -import java.io.IOException;
22   -import java.net.URI;
23   -
24   -// TODO @fansili:mj 这块 websocket 有点小复杂,虽然代码量 400 多行;感觉可以考虑,有没第三方 sdk,通过它透明接入 mj
25   -@Slf4j
26   -public class MidjourneyWebSocketStarter implements WebSocketStarter {
27   - /**
28   - * 链接重试次数
29   - */
30   - private static final int CONNECT_RETRY_LIMIT = 5;
31   - /**
32   - * mj 配置文件
33   - */
34   - private final MidjourneyConfig midjourneyConfig;
35   - /**
36   - * mj 监听(所有message 都会 callback到这里)
37   - */
38   - private final MidjourneyMessageListener userMessageListener;
39   - /**
40   - * wss 服务器
41   - */
42   - private final String wssServer;
43   - /**
44   - *
45   - */
46   - private final String resumeWss;
47   - /**
48   - *
49   - */
50   - private ResumeData resumeData = null;
51   - /**
52   - * 是否运行成功
53   - */
54   - private boolean running = false;
55   - /**
56   - * 链接成功的 session
57   - */
58   - private WebSocketSession webSocketSession = null;
59   - private WssNotify wssNotify = null;
60   -
61   - public MidjourneyWebSocketStarter(String wssServer,
62   - String resumeWss,
63   - MidjourneyConfig midjourneyConfig,
64   - MidjourneyMessageListener userMessageListener) {
65   - this.wssServer = wssServer;
66   - this.resumeWss = resumeWss;
67   - this.midjourneyConfig = midjourneyConfig;
68   - this.userMessageListener = userMessageListener;
69   - }
70   -
71   - @Override
72   - public void start(WssNotify wssNotify) {
73   - this.wssNotify = wssNotify;
74   - start(false);
75   - }
76   -
77   - private void start(boolean reconnect) {
78   - // 设置header
79   - WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
80   - headers.add("Accept-Encoding", "gzip, deflate, br");
81   - headers.add("Accept-Language", "zh-CN,zh;q=0.9");
82   - headers.add("Cache-Control", "no-cache");
83   - headers.add("Pragma", "no-cache");
84   - headers.add("Sec-Websocket-Extensions", "permessage-deflate; client_max_window_bits");
85   - headers.add("User-Agent", this.midjourneyConfig.getUserAage());
86   - // 创建 mjHeader
87   - MidjourneyWebSocketHandler mjWebSocketHandler = new MidjourneyWebSocketHandler(
88   - this.midjourneyConfig, this.userMessageListener, this::onSocketSuccess, this::onSocketFailure);
89   - //
90   - String gatewayUrl;
91   - if (reconnect) {
92   - gatewayUrl = getGatewayServer(this.resumeData.getResumeGatewayUrl()) + "/?encoding=json&v=9&compress=zlib-stream";
93   - mjWebSocketHandler.setSessionId(this.resumeData.getSessionId());
94   - mjWebSocketHandler.setSequence(this.resumeData.getSequence());
95   - mjWebSocketHandler.setResumeGatewayUrl(this.resumeData.getResumeGatewayUrl());
96   - } else {
97   - gatewayUrl = getGatewayServer(null) + "/?encoding=json&v=9&compress=zlib-stream";
98   - }
99   - // 创建 StandardWebSocketClient
100   - StandardWebSocketClient webSocketClient = new StandardWebSocketClient();
101   - // 设置 io timeout 时间
102   - webSocketClient.getUserProperties().put(Constants.IO_TIMEOUT_MS_PROPERTY, "10000");
103   - //
104   - ListenableFuture<WebSocketSession> socketSessionFuture = webSocketClient.doHandshake(mjWebSocketHandler, headers, URI.create(gatewayUrl));
105   - // 添加 callback 进行回调
106   - socketSessionFuture.addCallback(new ListenableFutureCallback<>() {
107   - @Override
108   - public void onFailure(@NotNull Throwable e) {
109   - onSocketFailure(MidjourneyWebSocketHandler.CLOSE_CODE_EXCEPTION, e.getMessage());
110   - }
111   -
112   - @Override
113   - public void onSuccess(WebSocketSession session) {
114   - MidjourneyWebSocketStarter.this.webSocketSession = session;
115   - }
116   - });
117   - }
118   -
119   - private void onSocketSuccess(String sessionId, Object sequence, String resumeGatewayUrl) {
120   - this.resumeData = new ResumeData(sessionId, sequence, resumeGatewayUrl);
121   - this.running = true;
122   - notifyWssLock(MidjourneyNotifyCode.SUCCESS, "");
123   - }
124   -
125   - private void onSocketFailure(int code, String reason) {
126   - // 1001异常可以忽略
127   - if (code == 1001) {
128   - return;
129   - }
130   - // 关闭 socket
131   - closeSocketSessionWhenIsOpen();
132   - // 没有运行通知
133   - if (!this.running) {
134   - notifyWssLock(code, reason);
135   - return;
136   - }
137   - // 已经运行先设置为false,发起
138   - this.running = false;
139   - if (code >= 4000) {
140   - log.warn("[wss-{}] Can't reconnect! Account disabled. Closed by {}({}).", this.midjourneyConfig.getChannelId(), code, reason);
141   - } else if (code == 2001) {
142   - log.warn("[wss-{}] Closed by {}({}). Try reconnect...", this.midjourneyConfig.getChannelId(), code, reason);
143   - tryReconnect();
144   - } else {
145   - log.warn("[wss-{}] Closed by {}({}). Try new connection...", this.midjourneyConfig.getChannelId(), code, reason);
146   - tryNewConnect();
147   - }
148   - }
149   -
150   - /**
151   - * 重连
152   - */
153   - private void tryReconnect() {
154   - try {
155   - tryStart(true);
156   - } catch (Exception e) {
157   - log.warn("[wss-{}] Reconnect fail: {}, Try new connection...", this.midjourneyConfig.getChannelId(), e.getMessage());
158   - ThreadUtil.sleep(1000);
159   - tryNewConnect();
160   - }
161   - }
162   -
163   - private void tryNewConnect() {
164   - // 链接重试次数5
165   - for (int i = 1; i <= CONNECT_RETRY_LIMIT; i++) {
166   - try {
167   - tryStart(false);
168   - return;
169   - } catch (Exception e) {
170   - log.warn("[wss-{}] New connect fail ({}): {}", this.midjourneyConfig.getChannelId(), i, e.getMessage());
171   - ThreadUtil.sleep(5000);
172   - }
173   - }
174   - log.error("[wss-{}] Account disabled", this.midjourneyConfig.getChannelId());
175   - }
176   -
177   - public void tryStart(boolean reconnect) {
178   - start(reconnect);
179   - }
180   -
181   - private void notifyWssLock(int code, String reason) {
182   - System.err.println("notifyWssLock: " + code + " - " + reason);
183   - if (wssNotify != null) {
184   - wssNotify.notify(code, reason);
185   - }
186   - }
187   -
188   - /**
189   - * 关闭 socket session
190   - */
191   - private void closeSocketSessionWhenIsOpen() {
192   - try {
193   - if (this.webSocketSession != null && this.webSocketSession.isOpen()) {
194   - this.webSocketSession.close(CloseStatus.GOING_AWAY);
195   - }
196   - } catch (IOException e) {
197   - // do nothing
198   - }
199   - }
200   -
201   - private String getGatewayServer(String resumeGatewayUrl) {
202   - if (CharSequenceUtil.isNotBlank(resumeGatewayUrl)) {
203   - return CharSequenceUtil.isBlank(this.resumeWss) ? resumeGatewayUrl : this.resumeWss;
204   - }
205   - return this.wssServer;
206   - }
207   -
208   - @Getter
209   - public static class ResumeData {
210   -
211   - public ResumeData(String sessionId, Object sequence, String resumeGatewayUrl) {
212   - this.sessionId = sessionId;
213   - this.sequence = sequence;
214   - this.resumeGatewayUrl = resumeGatewayUrl;
215   - }
216   -
217   - /**
218   - * socket session
219   - */
220   - private final String sessionId;
221   - private final Object sequence;
222   - private final String resumeGatewayUrl;
223   - }
224   -}
225 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/SuccessCallback.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -
4   -public interface SuccessCallback {
5   -
6   - void onSuccess(String sessionId, Object sequence, String resumeGatewayUrl);
7   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/WebSocketStarter.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -
4   -public interface WebSocketStarter {
5   -
6   - void start(WssNotify wssNotify) throws Exception;
7   -
8   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/WssNotify.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket;
2   -
3   -/**
4   - * 通知信息
5   - *
6   - * @author fansili
7   - * @time 2024/4/29 14:21
8   - * @since 1.0
9   - */
10   -public interface WssNotify {
11   -
12   - void notify(int code, String message);
13   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/handler/MidjourneyWebSocketHandler.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket.handler;
2   -
3   -import cn.hutool.core.text.CharSequenceUtil;
4   -import cn.hutool.core.thread.ThreadUtil;
5   -import cn.hutool.core.util.RandomUtil;
6   -import cn.hutool.http.useragent.UserAgent;
7   -import cn.hutool.http.useragent.UserAgentUtil;
8   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
9   -import org.springframework.ai.models.midjourney.webSocket.FailureCallback;
10   -import org.springframework.ai.models.midjourney.webSocket.SuccessCallback;
11   -import org.springframework.ai.models.midjourney.webSocket.listener.MidjourneyMessageListener;
12   -import lombok.Setter;
13   -import lombok.extern.slf4j.Slf4j;
14   -import net.dv8tion.jda.api.utils.data.DataArray;
15   -import net.dv8tion.jda.api.utils.data.DataObject;
16   -import net.dv8tion.jda.api.utils.data.DataType;
17   -import net.dv8tion.jda.internal.requests.WebSocketCode;
18   -import net.dv8tion.jda.internal.utils.compress.Decompressor;
19   -import net.dv8tion.jda.internal.utils.compress.ZlibDecompressor;
20   -import org.jetbrains.annotations.NotNull;
21   -import org.springframework.web.socket.*;
22   -
23   -import java.io.IOException;
24   -import java.nio.ByteBuffer;
25   -import java.nio.charset.StandardCharsets;
26   -import java.util.concurrent.Executors;
27   -import java.util.concurrent.Future;
28   -import java.util.concurrent.ScheduledExecutorService;
29   -import java.util.concurrent.TimeUnit;
30   -
31   -@Slf4j
32   -public class MidjourneyWebSocketHandler implements WebSocketHandler {
33   - /**
34   - * close 错误码:重连
35   - */
36   - public static final int CLOSE_CODE_RECONNECT = 2001;
37   - /**
38   - * close 错误码:无效、作废
39   - */
40   - public static final int CLOSE_CODE_INVALIDATE = 1009;
41   - /**
42   - * close 错误码:异常
43   - */
44   - public static final int CLOSE_CODE_EXCEPTION = 1011;
45   - /**
46   - * mj配置文件
47   - */
48   - private final MidjourneyConfig midjourneyConfig;
49   - /**
50   - * mj 消息监听
51   - */
52   - private final MidjourneyMessageListener userMessageListener;
53   - /**
54   - * 成功回调
55   - */
56   - private final SuccessCallback successCallback;
57   - /**
58   - * 失败回调
59   - */
60   - private final FailureCallback failureCallback;
61   - /**
62   - * 心跳执行器
63   - */
64   - private final ScheduledExecutorService heartExecutor;
65   - /**
66   - * auth数据
67   - */
68   - private final DataObject authData;
69   -
70   - @Setter
71   - private String sessionId = null;
72   - @Setter
73   - private Object sequence = null;
74   - @Setter
75   - private String resumeGatewayUrl = null;
76   -
77   - private long interval = 41250;
78   - private boolean heartbeatAck = false;
79   -
80   - private Future<?> heartbeatInterval;
81   - private Future<?> heartbeatTimeout;
82   -
83   - /**
84   - * 处理 message 消息的 Decompressor
85   - */
86   - private final Decompressor decompressor = new ZlibDecompressor(2048);
87   -
88   - public MidjourneyWebSocketHandler(MidjourneyConfig account,
89   - MidjourneyMessageListener userMessageListener,
90   - SuccessCallback successCallback,
91   - FailureCallback failureCallback) {
92   - this.midjourneyConfig = account;
93   - this.userMessageListener = userMessageListener;
94   - this.successCallback = successCallback;
95   - this.failureCallback = failureCallback;
96   - this.heartExecutor = Executors.newSingleThreadScheduledExecutor();
97   - this.authData = createAuthData();
98   - }
99   -
100   - @Override
101   - public void afterConnectionEstablished(@NotNull WebSocketSession session) throws Exception {
102   - // do nothing
103   - }
104   -
105   - @Override
106   - public void handleTransportError(@NotNull WebSocketSession session, @NotNull Throwable e) throws Exception {
107   - log.error("[wss-{}] Transport error", this.midjourneyConfig.getChannelId(), e);
108   - // 通知链接异常
109   - onFailure(CLOSE_CODE_EXCEPTION, "transport error");
110   - }
111   -
112   - @Override
113   - public void afterConnectionClosed(@NotNull WebSocketSession session, @NotNull CloseStatus closeStatus) throws Exception {
114   - // 链接关闭
115   - onFailure(closeStatus.getCode(), closeStatus.getReason());
116   - }
117   -
118   - @Override
119   - public boolean supportsPartialMessages() {
120   - return true;
121   - }
122   -
123   - @Override
124   - public void handleMessage(@NotNull WebSocketSession session, WebSocketMessage<?> message) throws Exception {
125   - // 获取 message 消息
126   - ByteBuffer buffer = (ByteBuffer) message.getPayload();
127   - // 解析 message
128   - byte[] decompressed = decompressor.decompress(buffer.array());
129   - if (decompressed == null) {
130   - return;
131   - }
132   - // 转换 json
133   - String json = new String(decompressed, StandardCharsets.UTF_8);
134   - // 转换 jda 自带的 dataObject(和json object 差不多)
135   - DataObject data = DataObject.fromJson(json);
136   - // 获取消息类型
137   - int opCode = data.getInt("op");
138   - switch (opCode) {
139   - case WebSocketCode.HEARTBEAT -> handleHeartbeat(session);
140   - case WebSocketCode.HEARTBEAT_ACK -> {
141   - this.heartbeatAck = true;
142   - clearHeartbeatTimeout();
143   - }
144   - case WebSocketCode.HELLO -> {
145   - handleHello(session, data);
146   - doResumeOrIdentify(session);
147   - }
148   - case WebSocketCode.RESUME -> onSuccess();
149   - case WebSocketCode.RECONNECT -> onFailure(CLOSE_CODE_RECONNECT, "receive server reconnect");
150   - case WebSocketCode.INVALIDATE_SESSION -> onFailure(CLOSE_CODE_INVALIDATE, "receive session invalid");
151   - case WebSocketCode.DISPATCH -> handleDispatch(data);
152   - default -> log.debug("[wss-{}] Receive unknown code: {}.", midjourneyConfig.getChannelId(), data);
153   - }
154   - }
155   -
156   - private void handleDispatch(DataObject raw) {
157   - this.sequence = raw.opt("s").orElse(null);
158   - if (!raw.isType("d", DataType.OBJECT)) {
159   - return;
160   - }
161   - DataObject content = raw.getObject("d");
162   - String t = raw.getString("t", null);
163   - if ("READY".equals(t)) {
164   - this.sessionId = content.getString("session_id");
165   - this.resumeGatewayUrl = content.getString("resume_gateway_url");
166   - onSuccess();
167   - } else if ("RESUMED".equals(t)) {
168   - onSuccess();
169   - } else {
170   - try {
171   - this.userMessageListener.onMessage(raw);
172   - } catch (Exception e) {
173   - log.error("[wss-{}] Handle message error", this.midjourneyConfig.getChannelId(), e);
174   - }
175   - }
176   - }
177   -
178   - private void handleHeartbeat(WebSocketSession session) {
179   - sendMessage(session, WebSocketCode.HEARTBEAT, this.sequence);
180   - this.heartbeatTimeout = ThreadUtil.execAsync(() -> {
181   - ThreadUtil.sleep(this.interval);
182   - onFailure(CLOSE_CODE_RECONNECT, "heartbeat has not ack");
183   - });
184   - }
185   -
186   - private void handleHello(WebSocketSession session, DataObject data) {
187   - clearHeartbeatInterval();
188   - this.interval = data.getObject("d").getLong("heartbeat_interval");
189   - this.heartbeatAck = true;
190   - this.heartbeatInterval = this.heartExecutor.scheduleAtFixedRate(() -> {
191   - if (this.heartbeatAck) {
192   - this.heartbeatAck = false;
193   - sendMessage(session, WebSocketCode.HEARTBEAT, this.sequence);
194   - } else {
195   - onFailure(CLOSE_CODE_RECONNECT, "heartbeat has not ack interval");
196   - }
197   - }, (long) Math.floor(RandomUtil.randomDouble(0, 1) * this.interval), this.interval, TimeUnit.MILLISECONDS);
198   - }
199   -
200   - private void doResumeOrIdentify(WebSocketSession session) {
201   - if (CharSequenceUtil.isBlank(this.sessionId)) {
202   - sendMessage(session, WebSocketCode.IDENTIFY, this.authData);
203   - } else {
204   - var data = DataObject.empty().put("token", this.midjourneyConfig.getToken())
205   - .put("session_id", this.sessionId).put("seq", this.sequence);
206   - sendMessage(session, WebSocketCode.RESUME, data);
207   - }
208   - }
209   -
210   - private void sendMessage(WebSocketSession session, int op, Object d) {
211   - var data = DataObject.empty().put("op", op).put("d", d);
212   - try {
213   - session.sendMessage(new TextMessage(data.toString()));
214   - } catch (IOException e) {
215   - log.error("[wss-{}] Send message error", this.midjourneyConfig.getChannelId(), e);
216   - onFailure(CLOSE_CODE_EXCEPTION, "send message error");
217   - }
218   - }
219   -
220   - private void onSuccess() {
221   - ThreadUtil.execute(() -> this.successCallback.onSuccess(this.sessionId, this.sequence, this.resumeGatewayUrl));
222   - }
223   -
224   - private void onFailure(int code, String reason) {
225   - clearHeartbeatTimeout();
226   - clearHeartbeatInterval();
227   - ThreadUtil.execute(() -> this.failureCallback.onFailure(code, reason));
228   - }
229   -
230   - private void clearHeartbeatTimeout() {
231   - if (this.heartbeatTimeout != null) {
232   - this.heartbeatTimeout.cancel(true);
233   - this.heartbeatTimeout = null;
234   - }
235   - }
236   -
237   - private void clearHeartbeatInterval() {
238   - if (this.heartbeatInterval != null) {
239   - this.heartbeatInterval.cancel(true);
240   - this.heartbeatInterval = null;
241   - }
242   - }
243   -
244   - private DataObject createAuthData() {
245   - UserAgent userAgent = UserAgentUtil.parse(this.midjourneyConfig.getUserAage());
246   - DataObject connectionProperties = DataObject.empty()
247   - .put("browser", userAgent.getBrowser().getName())
248   - .put("browser_user_agent", this.midjourneyConfig.getUserAage())
249   - .put("browser_version", userAgent.getVersion())
250   - .put("client_build_number", 222963)
251   - .put("client_event_source", null)
252   - .put("device", "")
253   - .put("os", userAgent.getOs().getName())
254   - .put("referer", "https://www.midjourney.com")
255   - .put("referrer_current", "")
256   - .put("referring_domain", "www.midjourney.com")
257   - .put("referring_domain_current", "")
258   - .put("release_channel", "stable")
259   - .put("system_locale", "zh-CN");
260   - DataObject presence = DataObject.empty()
261   - .put("activities", DataArray.empty())
262   - .put("afk", false)
263   - .put("since", 0)
264   - .put("status", "online");
265   - DataObject clientState = DataObject.empty()
266   - .put("api_code_version", 0)
267   - .put("guild_versions", DataObject.empty())
268   - .put("highest_last_message_id", "0")
269   - .put("private_channels_version", "0")
270   - .put("read_state_version", 0)
271   - .put("user_guild_settings_version", -1)
272   - .put("user_settings_version", -1);
273   - return DataObject.empty()
274   - .put("capabilities", 16381)
275   - .put("client_state", clientState)
276   - .put("compress", false)
277   - .put("presence", presence)
278   - .put("properties", connectionProperties)
279   - .put("token", this.midjourneyConfig.getToken());
280   - }
281   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/midjourney/webSocket/listener/MidjourneyMessageListener.java deleted
1   -package org.springframework.ai.models.midjourney.webSocket.listener;
2   -
3   -
4   -import cn.hutool.core.collection.CollUtil;
5   -import cn.hutool.core.text.CharSequenceUtil;
6   -import cn.hutool.core.util.StrUtil;
7   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
8   -import org.springframework.ai.models.midjourney.MidjourneyMessage;
9   -import org.springframework.ai.models.midjourney.constants.MidjourneyConstants;
10   -import org.springframework.ai.models.midjourney.constants.MidjourneyGennerateStatusEnum;
11   -import org.springframework.ai.models.midjourney.constants.MidjourneyMessageTypeEnum;
12   -import org.springframework.ai.models.midjourney.util.MidjourneyUtil;
13   -import org.springframework.ai.models.midjourney.webSocket.MidjourneyMessageHandler;
14   -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
15   -import lombok.extern.slf4j.Slf4j;
16   -import net.dv8tion.jda.api.utils.data.DataObject;
17   -
18   -import java.util.List;
19   -
20   -@Slf4j
21   -public class MidjourneyMessageListener {
22   -
23   - private MidjourneyConfig midjourneyConfig;
24   - private MidjourneyMessageHandler midjourneyMessageHandler = null;
25   -
26   - public MidjourneyMessageListener(MidjourneyConfig midjourneyConfig) {
27   - this.midjourneyConfig = midjourneyConfig;
28   - }
29   -
30   - public MidjourneyMessageListener(MidjourneyConfig midjourneyConfig,
31   - MidjourneyMessageHandler midjourneyMessageHandler) {
32   - this.midjourneyConfig = midjourneyConfig;
33   - this.midjourneyMessageHandler = midjourneyMessageHandler;
34   - }
35   -
36   - public void onMessage(DataObject raw) {
37   - MidjourneyMessageTypeEnum messageType = MidjourneyMessageTypeEnum.of(raw.getString("t"));
38   - if (messageType == null || MidjourneyMessageTypeEnum.DELETE == messageType) {
39   - return;
40   - }
41   - DataObject data = raw.getObject("d");
42   - if (ignoreAndLogMessage(data, messageType)) {
43   - return;
44   - }
45   - log.info("socket message: {}", raw);
46   - // 转换几个重要的信息
47   - MidjourneyMessage mjMessage = new MidjourneyMessage();
48   - mjMessage.setId(getString(data, MidjourneyConstants.MSG_ID, ""));
49   - mjMessage.setNonce(getString(data, MidjourneyConstants.MSG_NONCE, ""));
50   - mjMessage.setType(data.getInt(MidjourneyConstants.MSG_TYPE));
51   - mjMessage.setRawData(StrUtil.str(raw.toJson(), "UTF-8"));
52   - mjMessage.setContent(MidjourneyUtil.parseContent(data.getString(MidjourneyConstants.MSG_CONTENT)));
53   - // 转换 components
54   - if (!data.getArray(MidjourneyConstants.MSG_COMPONENTS).isEmpty()) {
55   - String componentsJson = StrUtil.str(data.getArray(MidjourneyConstants.MSG_COMPONENTS).toJson(), "UTF-8");
56   - List<MidjourneyMessage.ComponentType> components = JsonUtils.parseArray(componentsJson, MidjourneyMessage.ComponentType.class);
57   - mjMessage.setComponents(components);
58   - }
59   - // 转换附件
60   - if (!data.getArray(MidjourneyConstants.MSG_ATTACHMENTS).isEmpty()) {
61   - String attachmentsJson = StrUtil.str(data.getArray(MidjourneyConstants.MSG_ATTACHMENTS).toJson(), "UTF-8");
62   - List<MidjourneyMessage.Attachment> attachments = JsonUtils.parseArray(attachmentsJson, MidjourneyMessage.Attachment.class);
63   - mjMessage.setAttachments(attachments);
64   - }
65   - // 转换 embeds 提示信息
66   - if (!data.getArray(MidjourneyConstants.MSG_EMBEDS).isEmpty()) {
67   - String embedJson = StrUtil.str(data.getArray(MidjourneyConstants.MSG_EMBEDS).toJson(), "UTF-8");
68   - List<MidjourneyMessage.Embed> embeds = JsonUtils.parseArray(embedJson, MidjourneyMessage.Embed.class);
69   - mjMessage.setEmbeds(embeds);
70   - }
71   - // 转换状态
72   - convertGenerateStatus(mjMessage);
73   - // message handler 调用
74   - if (midjourneyMessageHandler != null) {
75   - midjourneyMessageHandler.messageHandler(mjMessage);
76   - }
77   - }
78   -
79   - private String getString(DataObject data, String key, String defaultValue) {
80   - if (!data.hasKey(key)) {
81   - return defaultValue;
82   - }
83   - return data.getString(key);
84   - }
85   -
86   - private void convertGenerateStatus(MidjourneyMessage mjMessage) {
87   - //
88   - // tip:提示、警告、异常 content是没有内容的
89   - // tip: 一般错误信息在 Embeds 只要 Embeds有值,content就没信息。
90   - if (CollUtil.isNotEmpty(mjMessage.getEmbeds())) {
91   - return;
92   - }
93   - if (mjMessage.getType() == 20 && mjMessage.getContent().getStatus().contains("Waiting")) {
94   - mjMessage.setGenerateStatus(MidjourneyGennerateStatusEnum.WAITING.getStatus());
95   - } else if (mjMessage.getType() == 20 && !StrUtil.isBlank(mjMessage.getContent().getProgress())) {
96   - mjMessage.setGenerateStatus(MidjourneyGennerateStatusEnum.IN_PROGRESS.getStatus());
97   - } else if (mjMessage.getType() == 0 && !CollUtil.isEmpty(mjMessage.getComponents())) {
98   - mjMessage.setGenerateStatus(MidjourneyGennerateStatusEnum.COMPLETED.getStatus());
99   - }
100   - }
101   -
102   - private boolean ignoreAndLogMessage(DataObject data, MidjourneyMessageTypeEnum messageType) {
103   - String channelId = data.getString(MidjourneyConstants.MSG_CHANNEL_ID);
104   - if (!CharSequenceUtil.equals(channelId, midjourneyConfig.getChannelId())) {
105   - return true;
106   - }
107   - String authorName = data.optObject("author").map(a -> a.getString("username")).orElse("System");
108   - log.debug("{} - {} - {}: {}", midjourneyConfig.getChannelId(), messageType.name(), authorName, data.opt("content").orElse(""));
109   - return false;
110   - }
111   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/describe.json deleted
1   -{
2   - "type": 2,
3   - "guild_id": "$guild_id",
4   - "channel_id": "$channel_id",
5   - "application_id": "936929561302675456",
6   - "session_id": "$session_id",
7   - "nonce": "$nonce",
8   - "data": {
9   - "version": "1204231436023111690",
10   - "id": "1092492867185950852",
11   - "name": "describe",
12   - "type": 1,
13   - "options": [
14   - {
15   - "type": 11,
16   - "name": "image",
17   - "value": 0
18   - }
19   - ],
20   - "attachments": [
21   - {
22   - "id": "0",
23   - "filename": "$file_name",
24   - "uploaded_filename": "$final_file_name"
25   - }
26   - ]
27   - }
28   -}
29 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/imagine.json deleted
1   -{
2   - "type": 2,
3   - "guild_id": "$guild_id",
4   - "channel_id": "$channel_id",
5   - "application_id": "936929561302675456",
6   - "session_id": "$session_id",
7   - "nonce": "$nonce",
8   - "data": {
9   - "version": "1237876415471554623",
10   - "id": "938956540159881230",
11   - "name": "imagine",
12   - "type": 1,
13   - "options": [
14   - {
15   - "type": 3,
16   - "name": "prompt",
17   - "value": "$prompt"
18   - }
19   - ]
20   - }
21   -}
22 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body/reroll.json deleted
1   -{
2   - "type": 3,
3   - "guild_id": "$guild_id",
4   - "channel_id": "$channel_id",
5   - "message_id": "$message_id",
6   - "application_id": "936929561302675456",
7   - "session_id": "$session_id",
8   - "nonce": "$nonce",
9   - "message_flags": 0,
10   - "data": {
11   - "component_type": 2,
12   - "custom_id": "$custom_id"
13   - }
14   -}
15 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/1.json deleted
1   -{
2   - "op": 0,
3   - "s": 17,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "nonce": "1784822781483888640",
44   - "application_id": "936929561302675456",
45   - "edited_timestamp": null,
46   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (Waiting to start)",
47   - "tts": false,
48   - "webhook_id": "936929561302675456",
49   - "mentions": [
50   - {
51   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
52   - "avatar_decoration_data": null,
53   - "member": {
54   - "premium_since": null,
55   - "nick": null,
56   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
57   - "communication_disabled_until": null,
58   - "roles": [],
59   - "pending": false,
60   - "flags": 0,
61   - "deaf": false,
62   - "mute": false,
63   - "avatar": null
64   - },
65   - "clan": null,
66   - "public_flags": 0,
67   - "id": "975372485971312700",
68   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
69   - "username": "andrakosq9211",
70   - "discriminator": "0"
71   - }
72   - ],
73   - "member": {
74   - "premium_since": null,
75   - "nick": null,
76   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
77   - "communication_disabled_until": null,
78   - "roles": [
79   - "1234355760184561747"
80   - ],
81   - "pending": false,
82   - "flags": 0,
83   - "deaf": false,
84   - "mute": false,
85   - "avatar": null
86   - },
87   - "interaction": {
88   - "name": "imagine",
89   - "member": {
90   - "premium_since": null,
91   - "nick": null,
92   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
93   - "communication_disabled_until": null,
94   - "roles": [],
95   - "pending": false,
96   - "flags": 0,
97   - "deaf": false,
98   - "mute": false,
99   - "avatar": null
100   - },
101   - "id": "1234381513597128715",
102   - "type": 2,
103   - "user": {
104   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
105   - "avatar_decoration_data": null,
106   - "clan": null,
107   - "public_flags": 0,
108   - "id": "975372485971312700",
109   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
110   - "username": "andrakosq9211",
111   - "discriminator": "0"
112   - }
113   - },
114   - "guild_id": "1234355413420347402",
115   - "position": 0,
116   - "id": "1234381516130357379",
117   - "embeds": [],
118   - "channel_id": "1234380679576424448",
119   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
120   - }
121   -}
122 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/10.json deleted
1   -{
2   - "op": 0,
3   - "s": 38,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [
10   - {
11   - "filename": "5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp",
12   - "size": 40906,
13   - "content_type": "image/webp",
14   - "width": 512,
15   - "placeholder_version": 1,
16   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234381954301038622/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308747&is=662f35c7&hm=5cff8b62f6c174b45a80d096eefbea9bf791ccfb50f586734efadbd96b57a114&",
17   - "placeholder": "W/gJHwiCN4VoaZZ4ePd3aIeFCJacgqAG",
18   - "id": "1234381954301038622",
19   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234381954301038622/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308747&is=662f35c7&hm=5cff8b62f6c174b45a80d096eefbea9bf791ccfb50f586734efadbd96b57a114&",
20   - "height": 512
21   - }
22   - ],
23   - "interaction_metadata": {
24   - "user_id": "975372485971312700",
25   - "name": "imagine",
26   - "authorizing_integration_owners": {
27   - "0": "1234355413420347402"
28   - },
29   - "id": "1234381513597128715",
30   - "type": 2,
31   - "user": {
32   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
33   - "avatar_decoration_data": null,
34   - "clan": null,
35   - "public_flags": 0,
36   - "id": "975372485971312700",
37   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
38   - "username": "andrakosq9211",
39   - "discriminator": "0"
40   - }
41   - },
42   - "author": {
43   - "global_name": null,
44   - "bot": true,
45   - "avatar_decoration_data": null,
46   - "clan": null,
47   - "public_flags": 589824,
48   - "id": "936929561302675456",
49   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
50   - "username": "Midjourney Bot",
51   - "discriminator": "9282"
52   - },
53   - "flags": 0,
54   - "type": 20,
55   - "mention_roles": [],
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": "2024-04-29T05:53:11.587132+00:00",
58   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (75%) (relaxed)",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [
62   - {
63   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
64   - "avatar_decoration_data": null,
65   - "member": {
66   - "premium_since": null,
67   - "nick": null,
68   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
69   - "communication_disabled_until": null,
70   - "roles": [],
71   - "pending": false,
72   - "flags": 0,
73   - "deaf": false,
74   - "mute": false,
75   - "avatar": null
76   - },
77   - "clan": null,
78   - "public_flags": 0,
79   - "id": "975372485971312700",
80   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
81   - "username": "andrakosq9211",
82   - "discriminator": "0"
83   - }
84   - ],
85   - "member": {
86   - "premium_since": null,
87   - "nick": null,
88   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
89   - "communication_disabled_until": null,
90   - "roles": [
91   - "1234355760184561747"
92   - ],
93   - "pending": false,
94   - "flags": 0,
95   - "deaf": false,
96   - "mute": false,
97   - "avatar": null
98   - },
99   - "interaction": {
100   - "name": "imagine",
101   - "member": {
102   - "premium_since": null,
103   - "nick": null,
104   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
105   - "communication_disabled_until": null,
106   - "roles": [],
107   - "pending": false,
108   - "flags": 0,
109   - "deaf": false,
110   - "mute": false,
111   - "avatar": null
112   - },
113   - "id": "1234381513597128715",
114   - "type": 2,
115   - "user": {
116   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
117   - "avatar_decoration_data": null,
118   - "clan": null,
119   - "public_flags": 0,
120   - "id": "975372485971312700",
121   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
122   - "username": "andrakosq9211",
123   - "discriminator": "0"
124   - }
125   - },
126   - "guild_id": "1234355413420347402",
127   - "position": 0,
128   - "id": "1234381516130357379",
129   - "embeds": [],
130   - "channel_id": "1234380679576424448",
131   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
132   - }
133   -}
134 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/11.json deleted
1   -{
2   - "op": 0,
3   - "s": 39,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [
10   - {
11   - "filename": "5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp",
12   - "size": 77746,
13   - "content_type": "image/webp",
14   - "width": 512,
15   - "placeholder_version": 1,
16   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234381963381444691/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308749&is=662f35c9&hm=f87113bb4f667e56747a26812260f18b5c59f1e47991457756e77b576309534a&",
17   - "placeholder": "3OcJDwSASHWaWZZ4eNd2eHiGJyBMgKAG",
18   - "id": "1234381963381444691",
19   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234381963381444691/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308749&is=662f35c9&hm=f87113bb4f667e56747a26812260f18b5c59f1e47991457756e77b576309534a&",
20   - "height": 512
21   - }
22   - ],
23   - "interaction_metadata": {
24   - "user_id": "975372485971312700",
25   - "name": "imagine",
26   - "authorizing_integration_owners": {
27   - "0": "1234355413420347402"
28   - },
29   - "id": "1234381513597128715",
30   - "type": 2,
31   - "user": {
32   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
33   - "avatar_decoration_data": null,
34   - "clan": null,
35   - "public_flags": 0,
36   - "id": "975372485971312700",
37   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
38   - "username": "andrakosq9211",
39   - "discriminator": "0"
40   - }
41   - },
42   - "author": {
43   - "global_name": null,
44   - "bot": true,
45   - "avatar_decoration_data": null,
46   - "clan": null,
47   - "public_flags": 589824,
48   - "id": "936929561302675456",
49   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
50   - "username": "Midjourney Bot",
51   - "discriminator": "9282"
52   - },
53   - "flags": 0,
54   - "type": 20,
55   - "mention_roles": [],
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": "2024-04-29T05:53:13.745586+00:00",
58   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (95%) (relaxed)",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [
62   - {
63   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
64   - "avatar_decoration_data": null,
65   - "member": {
66   - "premium_since": null,
67   - "nick": null,
68   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
69   - "communication_disabled_until": null,
70   - "roles": [],
71   - "pending": false,
72   - "flags": 0,
73   - "deaf": false,
74   - "mute": false,
75   - "avatar": null
76   - },
77   - "clan": null,
78   - "public_flags": 0,
79   - "id": "975372485971312700",
80   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
81   - "username": "andrakosq9211",
82   - "discriminator": "0"
83   - }
84   - ],
85   - "member": {
86   - "premium_since": null,
87   - "nick": null,
88   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
89   - "communication_disabled_until": null,
90   - "roles": [
91   - "1234355760184561747"
92   - ],
93   - "pending": false,
94   - "flags": 0,
95   - "deaf": false,
96   - "mute": false,
97   - "avatar": null
98   - },
99   - "interaction": {
100   - "name": "imagine",
101   - "member": {
102   - "premium_since": null,
103   - "nick": null,
104   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
105   - "communication_disabled_until": null,
106   - "roles": [],
107   - "pending": false,
108   - "flags": 0,
109   - "deaf": false,
110   - "mute": false,
111   - "avatar": null
112   - },
113   - "id": "1234381513597128715",
114   - "type": 2,
115   - "user": {
116   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
117   - "avatar_decoration_data": null,
118   - "clan": null,
119   - "public_flags": 0,
120   - "id": "975372485971312700",
121   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
122   - "username": "andrakosq9211",
123   - "discriminator": "0"
124   - }
125   - },
126   - "guild_id": "1234355413420347402",
127   - "position": 0,
128   - "id": "1234381516130357379",
129   - "embeds": [],
130   - "channel_id": "1234380679576424448",
131   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
132   - }
133   -}
134 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/12.json deleted
1   -{
2   - "op": 0,
3   - "s": 40,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "custom_id": "MJ::JOB::upsample::1::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
13   - "style": 2,
14   - "label": "U1",
15   - "type": 2
16   - },
17   - {
18   - "custom_id": "MJ::JOB::upsample::2::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
19   - "style": 2,
20   - "label": "U2",
21   - "type": 2
22   - },
23   - {
24   - "custom_id": "MJ::JOB::upsample::3::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
25   - "style": 2,
26   - "label": "U3",
27   - "type": 2
28   - },
29   - {
30   - "custom_id": "MJ::JOB::upsample::4::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
31   - "style": 2,
32   - "label": "U4",
33   - "type": 2
34   - },
35   - {
36   - "emoji": {
37   - "name": "\uD83D\uDD04"
38   - },
39   - "custom_id": "MJ::JOB::reroll::0::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660::SOLO",
40   - "style": 2,
41   - "type": 2
42   - }
43   - ],
44   - "type": 1
45   - },
46   - {
47   - "components": [
48   - {
49   - "custom_id": "MJ::JOB::variation::1::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
50   - "style": 2,
51   - "label": "V1",
52   - "type": 2
53   - },
54   - {
55   - "custom_id": "MJ::JOB::variation::2::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
56   - "style": 2,
57   - "label": "V2",
58   - "type": 2
59   - },
60   - {
61   - "custom_id": "MJ::JOB::variation::3::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
62   - "style": 2,
63   - "label": "V3",
64   - "type": 2
65   - },
66   - {
67   - "custom_id": "MJ::JOB::variation::4::5d32f4e8-8d2f-4bef-82d8-bf517e3c3660",
68   - "style": 2,
69   - "label": "V4",
70   - "type": 2
71   - }
72   - ],
73   - "type": 1
74   - }
75   - ],
76   - "attachments": [
77   - {
78   - "filename": "andrakosq9211__5d32f4e8-8d2f-4bef-82d8-bf517e3c3660.png",
79   - "size": 8327001,
80   - "content_type": "image/png",
81   - "width": 2048,
82   - "placeholder_version": 1,
83   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234381975058514001/andrakosq9211__5d32f4e8-8d2f-4bef-82d8-bf517e3c3660.png?ex=6630874c&is=662f35cc&hm=20a8bb9b10c68645c9bd09a52b181de8566802590d070965d0a4738387781bb6&",
84   - "placeholder": "3dcJBwaASHWaWZZ4eNd2aHiGRwE+gLAH",
85   - "id": "1234381975058514001",
86   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234381975058514001/andrakosq9211__5d32f4e8-8d2f-4bef-82d8-bf517e3c3660.png?ex=6630874c&is=662f35cc&hm=20a8bb9b10c68645c9bd09a52b181de8566802590d070965d0a4738387781bb6&",
87   - "height": 2048
88   - }
89   - ],
90   - "author": {
91   - "global_name": null,
92   - "bot": true,
93   - "avatar_decoration_data": null,
94   - "clan": null,
95   - "public_flags": 589824,
96   - "id": "936929561302675456",
97   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
98   - "username": "Midjourney Bot",
99   - "discriminator": "9282"
100   - },
101   - "flags": 0,
102   - "type": 0,
103   - "mention_roles": [],
104   - "edited_timestamp": null,
105   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (relaxed)",
106   - "tts": false,
107   - "referenced_message": null,
108   - "mentions": [
109   - {
110   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
111   - "avatar_decoration_data": null,
112   - "member": {
113   - "premium_since": null,
114   - "nick": null,
115   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
116   - "communication_disabled_until": null,
117   - "roles": [],
118   - "pending": false,
119   - "flags": 0,
120   - "deaf": false,
121   - "mute": false,
122   - "avatar": null
123   - },
124   - "clan": null,
125   - "public_flags": 0,
126   - "id": "975372485971312700",
127   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
128   - "username": "andrakosq9211",
129   - "discriminator": "0"
130   - }
131   - ],
132   - "member": {
133   - "premium_since": null,
134   - "nick": null,
135   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
136   - "communication_disabled_until": null,
137   - "roles": [
138   - "1234355760184561747"
139   - ],
140   - "pending": false,
141   - "flags": 0,
142   - "deaf": false,
143   - "mute": false,
144   - "avatar": null
145   - },
146   - "guild_id": "1234355413420347402",
147   - "id": "1234381975335342122",
148   - "embeds": [],
149   - "channel_id": "1234380679576424448",
150   - "timestamp": "2024-04-29T05:53:16.628000+00:00"
151   - }
152   -}
153 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/2.json deleted
1   -{
2   - "op": 0,
3   - "s": 30,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:52:42.826454+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (0%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/3.json deleted
1   -{
2   - "op": 0,
3   - "s": 31,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:52:48.793794+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (10%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/4.json deleted
1   -{
2   - "op": 0,
3   - "s": 32,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:52:48.976941+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (20%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/5.json deleted
1   -{
2   - "op": 0,
3   - "s": 33,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:52:54.993089+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (22%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/6.json deleted
1   -{
2   - "op": 0,
3   - "s": 34,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:52:55.667426+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (32%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/7.json deleted
1   -{
2   - "op": 0,
3   - "s": 35,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234381513597128715",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 0,
41   - "type": 20,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T05:53:01.235104+00:00",
45   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (35%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "member": {
53   - "premium_since": null,
54   - "nick": null,
55   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
56   - "communication_disabled_until": null,
57   - "roles": [],
58   - "pending": false,
59   - "flags": 0,
60   - "deaf": false,
61   - "mute": false,
62   - "avatar": null
63   - },
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "member": {
73   - "premium_since": null,
74   - "nick": null,
75   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
76   - "communication_disabled_until": null,
77   - "roles": [
78   - "1234355760184561747"
79   - ],
80   - "pending": false,
81   - "flags": 0,
82   - "deaf": false,
83   - "mute": false,
84   - "avatar": null
85   - },
86   - "interaction": {
87   - "name": "imagine",
88   - "member": {
89   - "premium_since": null,
90   - "nick": null,
91   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
92   - "communication_disabled_until": null,
93   - "roles": [],
94   - "pending": false,
95   - "flags": 0,
96   - "deaf": false,
97   - "mute": false,
98   - "avatar": null
99   - },
100   - "id": "1234381513597128715",
101   - "type": 2,
102   - "user": {
103   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
104   - "avatar_decoration_data": null,
105   - "clan": null,
106   - "public_flags": 0,
107   - "id": "975372485971312700",
108   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
109   - "username": "andrakosq9211",
110   - "discriminator": "0"
111   - }
112   - },
113   - "guild_id": "1234355413420347402",
114   - "position": 0,
115   - "id": "1234381516130357379",
116   - "embeds": [],
117   - "channel_id": "1234380679576424448",
118   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
119   - }
120   -}
121 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/8.json deleted
1   -{
2   - "op": 0,
3   - "s": 36,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [
10   - {
11   - "filename": "5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp",
12   - "size": 43912,
13   - "content_type": "image/webp",
14   - "width": 512,
15   - "placeholder_version": 1,
16   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234381927348436992/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308741&is=662f35c1&hm=eb4abbb4ede30b588e02eba7c18203177dcea82612ee981bde696346f1d887ac&",
17   - "placeholder": "WpcRLxZwanaXh4d4h6d2aIeG92d6hbAH",
18   - "id": "1234381927348436992",
19   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234381927348436992/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308741&is=662f35c1&hm=eb4abbb4ede30b588e02eba7c18203177dcea82612ee981bde696346f1d887ac&",
20   - "height": 512
21   - }
22   - ],
23   - "interaction_metadata": {
24   - "user_id": "975372485971312700",
25   - "name": "imagine",
26   - "authorizing_integration_owners": {
27   - "0": "1234355413420347402"
28   - },
29   - "id": "1234381513597128715",
30   - "type": 2,
31   - "user": {
32   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
33   - "avatar_decoration_data": null,
34   - "clan": null,
35   - "public_flags": 0,
36   - "id": "975372485971312700",
37   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
38   - "username": "andrakosq9211",
39   - "discriminator": "0"
40   - }
41   - },
42   - "author": {
43   - "global_name": null,
44   - "bot": true,
45   - "avatar_decoration_data": null,
46   - "clan": null,
47   - "public_flags": 589824,
48   - "id": "936929561302675456",
49   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
50   - "username": "Midjourney Bot",
51   - "discriminator": "9282"
52   - },
53   - "flags": 0,
54   - "type": 20,
55   - "mention_roles": [],
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": "2024-04-29T05:53:05.164746+00:00",
58   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (35%) (relaxed)",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [
62   - {
63   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
64   - "avatar_decoration_data": null,
65   - "member": {
66   - "premium_since": null,
67   - "nick": null,
68   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
69   - "communication_disabled_until": null,
70   - "roles": [],
71   - "pending": false,
72   - "flags": 0,
73   - "deaf": false,
74   - "mute": false,
75   - "avatar": null
76   - },
77   - "clan": null,
78   - "public_flags": 0,
79   - "id": "975372485971312700",
80   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
81   - "username": "andrakosq9211",
82   - "discriminator": "0"
83   - }
84   - ],
85   - "member": {
86   - "premium_since": null,
87   - "nick": null,
88   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
89   - "communication_disabled_until": null,
90   - "roles": [
91   - "1234355760184561747"
92   - ],
93   - "pending": false,
94   - "flags": 0,
95   - "deaf": false,
96   - "mute": false,
97   - "avatar": null
98   - },
99   - "interaction": {
100   - "name": "imagine",
101   - "member": {
102   - "premium_since": null,
103   - "nick": null,
104   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
105   - "communication_disabled_until": null,
106   - "roles": [],
107   - "pending": false,
108   - "flags": 0,
109   - "deaf": false,
110   - "mute": false,
111   - "avatar": null
112   - },
113   - "id": "1234381513597128715",
114   - "type": 2,
115   - "user": {
116   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
117   - "avatar_decoration_data": null,
118   - "clan": null,
119   - "public_flags": 0,
120   - "id": "975372485971312700",
121   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
122   - "username": "andrakosq9211",
123   - "discriminator": "0"
124   - }
125   - },
126   - "guild_id": "1234355413420347402",
127   - "position": 0,
128   - "id": "1234381516130357379",
129   - "embeds": [],
130   - "channel_id": "1234380679576424448",
131   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
132   - }
133   -}
134 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/9.json deleted
1   -{
2   - "op": 0,
3   - "s": 37,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [
10   - {
11   - "filename": "5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp",
12   - "size": 27876,
13   - "content_type": "image/webp",
14   - "width": 512,
15   - "placeholder_version": 1,
16   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234381937288679506/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308743&is=662f35c3&hm=ccebcb830d6e76127164767721ebf18ec3bc1e9acf8d61481b5f755e89caf8b8&",
17   - "placeholder": "G7cJFwqCeYiHeId5h/h2eHmU9xeHc7AG",
18   - "id": "1234381937288679506",
19   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234381937288679506/5d32f4e8-8d2f-4bef-82d8-bf517e3c3660_grid_0.webp?ex=66308743&is=662f35c3&hm=ccebcb830d6e76127164767721ebf18ec3bc1e9acf8d61481b5f755e89caf8b8&",
20   - "height": 512
21   - }
22   - ],
23   - "interaction_metadata": {
24   - "user_id": "975372485971312700",
25   - "name": "imagine",
26   - "authorizing_integration_owners": {
27   - "0": "1234355413420347402"
28   - },
29   - "id": "1234381513597128715",
30   - "type": 2,
31   - "user": {
32   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
33   - "avatar_decoration_data": null,
34   - "clan": null,
35   - "public_flags": 0,
36   - "id": "975372485971312700",
37   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
38   - "username": "andrakosq9211",
39   - "discriminator": "0"
40   - }
41   - },
42   - "author": {
43   - "global_name": null,
44   - "bot": true,
45   - "avatar_decoration_data": null,
46   - "clan": null,
47   - "public_flags": 589824,
48   - "id": "936929561302675456",
49   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
50   - "username": "Midjourney Bot",
51   - "discriminator": "9282"
52   - },
53   - "flags": 0,
54   - "type": 20,
55   - "mention_roles": [],
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": "2024-04-29T05:53:07.496257+00:00",
58   - "content": "**海贼王,在赶海! --v 6.0** - <@975372485971312700> (55%) (relaxed)",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [
62   - {
63   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
64   - "avatar_decoration_data": null,
65   - "member": {
66   - "premium_since": null,
67   - "nick": null,
68   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
69   - "communication_disabled_until": null,
70   - "roles": [],
71   - "pending": false,
72   - "flags": 0,
73   - "deaf": false,
74   - "mute": false,
75   - "avatar": null
76   - },
77   - "clan": null,
78   - "public_flags": 0,
79   - "id": "975372485971312700",
80   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
81   - "username": "andrakosq9211",
82   - "discriminator": "0"
83   - }
84   - ],
85   - "member": {
86   - "premium_since": null,
87   - "nick": null,
88   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
89   - "communication_disabled_until": null,
90   - "roles": [
91   - "1234355760184561747"
92   - ],
93   - "pending": false,
94   - "flags": 0,
95   - "deaf": false,
96   - "mute": false,
97   - "avatar": null
98   - },
99   - "interaction": {
100   - "name": "imagine",
101   - "member": {
102   - "premium_since": null,
103   - "nick": null,
104   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
105   - "communication_disabled_until": null,
106   - "roles": [],
107   - "pending": false,
108   - "flags": 0,
109   - "deaf": false,
110   - "mute": false,
111   - "avatar": null
112   - },
113   - "id": "1234381513597128715",
114   - "type": 2,
115   - "user": {
116   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
117   - "avatar_decoration_data": null,
118   - "clan": null,
119   - "public_flags": 0,
120   - "id": "975372485971312700",
121   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
122   - "username": "andrakosq9211",
123   - "discriminator": "0"
124   - }
125   - },
126   - "guild_id": "1234355413420347402",
127   - "position": 0,
128   - "id": "1234381516130357379",
129   - "embeds": [],
130   - "channel_id": "1234380679576424448",
131   - "timestamp": "2024-04-29T05:51:27.145000+00:00"
132   - }
133   -}
134 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/Cancel Job按钮的消息体.json deleted
1   -{
2   - "op": 0,
3   - "s": 1112,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "custom_id": "MJ::CancelJob::ByJobid::a58fcee9-ec89-4471-aff3-088615fc78f2",
13   - "style": 4,
14   - "label": "Cancel Job",
15   - "type": 2
16   - }
17   - ],
18   - "type": 1
19   - }
20   - ],
21   - "attachments": [],
22   - "interaction_metadata": {
23   - "user_id": "975372485971312700",
24   - "interacted_message_id": "1234503859578081381",
25   - "authorizing_integration_owners": {
26   - "0": "1234355413420347402"
27   - },
28   - "id": "1234506142236020767",
29   - "type": 3,
30   - "user": {
31   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 0,
35   - "id": "975372485971312700",
36   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
37   - "username": "andrakosq9211",
38   - "discriminator": "0"
39   - }
40   - },
41   - "author": {
42   - "global_name": null,
43   - "bot": true,
44   - "avatar_decoration_data": null,
45   - "clan": null,
46   - "public_flags": 589824,
47   - "id": "936929561302675456",
48   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
49   - "username": "Midjourney Bot",
50   - "discriminator": "9282"
51   - },
52   - "flags": 64,
53   - "type": 19,
54   - "mention_roles": [],
55   - "application_id": "936929561302675456",
56   - "edited_timestamp": "2024-04-29T14:06:46.866376+00:00",
57   - "content": "**A girl from China, creator of ancient Chinese clothing, dances on the square --v 6.0 --ar 3:2** - Variations (Strong) by <@975372485971312700> (0%) (relaxed)",
58   - "tts": false,
59   - "webhook_id": "936929561302675456",
60   - "mentions": [
61   - {
62   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
63   - "avatar_decoration_data": null,
64   - "clan": null,
65   - "public_flags": 0,
66   - "id": "975372485971312700",
67   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
68   - "username": "andrakosq9211",
69   - "discriminator": "0"
70   - }
71   - ],
72   - "position": 0,
73   - "message_reference": {
74   - "guild_id": "1234355413420347402",
75   - "message_id": "1234503859578081381",
76   - "type": 0,
77   - "channel_id": "1234380679576424448"
78   - },
79   - "id": "1234506143943102605",
80   - "embeds": [],
81   - "channel_id": "1234380679576424448",
82   - "timestamp": "2024-04-29T14:06:40.731000+00:00"
83   - }
84   -}
85 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/MessageUpdate-1.json deleted
1   -{
2   - "op": 0,
3   - "s": 47,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [
10   - {
11   - "filename": "97b1c75b-41c2-4dfe-bb7d-e61fbea8f1c7_grid_0.webp",
12   - "size": 71390,
13   - "content_type": "image/webp",
14   - "width": 512,
15   - "ephemeral": true,
16   - "placeholder_version": 1,
17   - "proxy_url": "https://media.discordapp.net/ephemeral-attachments/1234380679576424448/1234437493542359114/97b1c75b-41c2-4dfe-bb7d-e61fbea8f1c7_grid_0.webp?ex=6630bb01&is=662f6981&hm=60e610be44d3ae5fec8f1cbfb791997a627901d132a24e4364ac663362ab9a30&",
18   - "placeholder": "XQgKBYJ8H3aDh3eHiAeIecB0Bsl2",
19   - "id": "1234437493542359114",
20   - "url": "https://cdn.discordapp.com/ephemeral-attachments/1234380679576424448/1234437493542359114/97b1c75b-41c2-4dfe-bb7d-e61fbea8f1c7_grid_0.webp?ex=6630bb01&is=662f6981&hm=60e610be44d3ae5fec8f1cbfb791997a627901d132a24e4364ac663362ab9a30&",
21   - "height": 340
22   - }
23   - ],
24   - "interaction_metadata": {
25   - "user_id": "975372485971312700",
26   - "interacted_message_id": "1234433732761620500",
27   - "authorizing_integration_owners": {
28   - "0": "1234355413420347402"
29   - },
30   - "id": "1234436261440126977",
31   - "type": 3,
32   - "user": {
33   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
34   - "avatar_decoration_data": null,
35   - "clan": null,
36   - "public_flags": 0,
37   - "id": "975372485971312700",
38   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
39   - "username": "andrakosq9211",
40   - "discriminator": "0"
41   - }
42   - },
43   - "author": {
44   - "global_name": null,
45   - "bot": true,
46   - "avatar_decoration_data": null,
47   - "clan": null,
48   - "public_flags": 589824,
49   - "id": "936929561302675456",
50   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
51   - "username": "Midjourney Bot",
52   - "discriminator": "9282"
53   - },
54   - "flags": 64,
55   - "type": 19,
56   - "mention_roles": [],
57   - "application_id": "936929561302675456",
58   - "edited_timestamp": "2024-04-29T09:33:53.172018+00:00",
59   - "content": "**A girl from China, creator of ancient Chinese clothing, dances on the square --ar 3:2** - Pan Right by <@975372485971312700> (35%) (relaxed)",
60   - "tts": false,
61   - "webhook_id": "936929561302675456",
62   - "mentions": [
63   - {
64   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
65   - "avatar_decoration_data": null,
66   - "clan": null,
67   - "public_flags": 0,
68   - "id": "975372485971312700",
69   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
70   - "username": "andrakosq9211",
71   - "discriminator": "0"
72   - }
73   - ],
74   - "position": 0,
75   - "message_reference": {
76   - "guild_id": "1234355413420347402",
77   - "message_id": "1234433732761620500",
78   - "type": 0,
79   - "channel_id": "1234380679576424448"
80   - },
81   - "id": "1234436266045608016",
82   - "embeds": [],
83   - "channel_id": "1234380679576424448",
84   - "timestamp": "2024-04-29T09:29:00.542000+00:00"
85   - }
86   -}
87 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/mj敏感词返回信息.json deleted
1   -{
2   - "op": 0,
3   - "s": 5,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "custom_id": "MJ::Prompts::LLMComplaintSubmit::8d706b5c-36d9-4ef5-af2e-b778c876e39b",
13   - "style": 2,
14   - "label": "Notify developers",
15   - "type": 2
16   - }
17   - ],
18   - "type": 1
19   - }
20   - ],
21   - "attachments": [],
22   - "interaction_metadata": {
23   - "user_id": "975372485971312700",
24   - "name": "imagine",
25   - "authorizing_integration_owners": {
26   - "0": "1234355413420347402"
27   - },
28   - "id": "1234381275448479744",
29   - "type": 2,
30   - "user": {
31   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 0,
35   - "id": "975372485971312700",
36   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
37   - "username": "andrakosq9211",
38   - "discriminator": "0"
39   - }
40   - },
41   - "author": {
42   - "global_name": null,
43   - "bot": true,
44   - "avatar_decoration_data": null,
45   - "clan": null,
46   - "public_flags": 589824,
47   - "id": "936929561302675456",
48   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
49   - "username": "Midjourney Bot",
50   - "discriminator": "9282"
51   - },
52   - "flags": 64,
53   - "type": 20,
54   - "mention_roles": [],
55   - "nonce": "1784822542798630912",
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": null,
58   - "content": "",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [],
62   - "interaction": {
63   - "name": "imagine",
64   - "id": "1234381275448479744",
65   - "type": 2,
66   - "user": {
67   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
68   - "avatar_decoration_data": null,
69   - "clan": null,
70   - "public_flags": 0,
71   - "id": "975372485971312700",
72   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
73   - "username": "andrakosq9211",
74   - "discriminator": "0"
75   - }
76   - },
77   - "position": 0,
78   - "id": "1234381284084809749",
79   - "embeds": [
80   - {
81   - "content_scan_version": 0,
82   - "color": 16711680,
83   - "footer": {
84   - "text": "/imagine 性感车模,站在车上! --v 6"
85   - },
86   - "description": "Sorry! Our AI moderator thinks this prompt is probably against our community standards.\n\nPlease review our current community standards:\n\n**ALLOWED**\n- Any image up to PG-13 rating involving fiction, fantasy, mythology.\n- Real images that may be seen as respectful or light-hearted parodies, satire, caricatures\n- Imaginary or exaggerated real-life scenarios, including absurd or humorous situations.\n\n**NOT ALLOWED**\n- Disrespectful, harmful, misleading public figures/events portrayals or potential to mislead.\n- Hate speech, explicit or real-world violence.\n- Nudity or unconsented overtly sexualized public figures.\n- Imagery that might be considered culturally insensitive\n\nThis AI system isn't perfect. If you find it rejecting something innocent please press the **Notify Developers** button and we will review it and try to further improve our performance. Thank you for your help!",
87   - "type": "rich",
88   - "title": "Banned prompt detected"
89   - }
90   - ],
91   - "channel_id": "1234380679576424448",
92   - "timestamp": "2024-04-29T05:50:31.821000+00:00"
93   - }
94   -}
95 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/mj服务器封号返回信息.json deleted
1   -{
2   - "op": 0,
3   - "s": 5,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "972721304891453450",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1225608134878302329"
15   - },
16   - "id": "1234353096516173844",
17   - "type": 2,
18   - "user": {
19   - "global_name": "tiger",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "972721304891453450",
24   - "avatar": "3646118d04fd12dfd301c4fd17afd801",
25   - "username": "jverbalu4990",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 64,
41   - "type": 20,
42   - "mention_roles": [],
43   - "nonce": "1784794363249700864",
44   - "application_id": "936929561302675456",
45   - "edited_timestamp": null,
46   - "content": "",
47   - "tts": false,
48   - "webhook_id": "936929561302675456",
49   - "mentions": [],
50   - "interaction": {
51   - "name": "imagine",
52   - "id": "1234353096516173844",
53   - "type": 2,
54   - "user": {
55   - "global_name": "tiger",
56   - "avatar_decoration_data": null,
57   - "clan": null,
58   - "public_flags": 0,
59   - "id": "972721304891453450",
60   - "avatar": "3646118d04fd12dfd301c4fd17afd801",
61   - "username": "jverbalu4990",
62   - "discriminator": "0"
63   - }
64   - },
65   - "position": 0,
66   - "id": "1234353097535393822",
67   - "embeds": [
68   - {
69   - "content_scan_version": 0,
70   - "color": 16711680,
71   - "footer": {
72   - "text": "/imagine 中国长城 --ar 1:1 --niji 6"
73   - },
74   - "description": "You have been blocked from accessing Midjourney. This happens on repeated or serious ToS violations.",
75   - "type": "rich",
76   - "title": "Blocked"
77   - }
78   - ],
79   - "channel_id": "1225608134878302332",
80   - "timestamp": "2024-04-29T03:58:31.624000+00:00"
81   - }
82   -}
83 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/nonce错误信息.json deleted
1   -{
2   - "op": 0,
3   - "s": 24,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "emoji": {
13   - "name": "upscale_1",
14   - "id": "940147353879478324"
15   - },
16   - "custom_id": "MJ::JOB::upsample_v6_2x_subtle::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
17   - "style": 2,
18   - "label": "Upscale (Subtle)",
19   - "type": 2
20   - },
21   - {
22   - "emoji": {
23   - "name": "upscale_1",
24   - "id": "940147353879478324"
25   - },
26   - "custom_id": "MJ::JOB::upsample_v6_2x_creative::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
27   - "style": 2,
28   - "label": "Upscale (Creative)",
29   - "type": 2
30   - },
31   - {
32   - "emoji": {
33   - "name": "🪄"
34   - },
35   - "custom_id": "MJ::JOB::low_variation::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
36   - "style": 2,
37   - "label": "Vary (Subtle)",
38   - "type": 2
39   - },
40   - {
41   - "emoji": {
42   - "name": "🪄"
43   - },
44   - "custom_id": "MJ::JOB::high_variation::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
45   - "style": 2,
46   - "label": "Vary (Strong)",
47   - "type": 2
48   - },
49   - {
50   - "emoji": {
51   - "name": "🖌️"
52   - },
53   - "custom_id": "MJ::Inpaint::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
54   - "style": 2,
55   - "label": "Vary (Region)",
56   - "type": 2
57   - }
58   - ],
59   - "type": 1
60   - },
61   - {
62   - "components": [
63   - {
64   - "emoji": {
65   - "name": "🔍"
66   - },
67   - "custom_id": "MJ::Outpaint::50::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
68   - "style": 4,
69   - "label": "Zoom Out 2x",
70   - "type": 2
71   - },
72   - {
73   - "emoji": {
74   - "name": "🔍"
75   - },
76   - "custom_id": "MJ::Outpaint::75::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
77   - "style": 2,
78   - "label": "Zoom Out 1.5x",
79   - "type": 2
80   - },
81   - {
82   - "emoji": {
83   - "name": "🔍"
84   - },
85   - "custom_id": "MJ::CustomZoom::519cd956-d02e-4ae2-b62d-17c499dbbe3f",
86   - "style": 2,
87   - "label": "Custom Zoom",
88   - "type": 2
89   - }
90   - ],
91   - "type": 1
92   - },
93   - {
94   - "components": [
95   - {
96   - "emoji": {
97   - "name": "⬅️"
98   - },
99   - "custom_id": "MJ::JOB::pan_left::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
100   - "style": 2,
101   - "type": 2
102   - },
103   - {
104   - "emoji": {
105   - "name": "➡️"
106   - },
107   - "custom_id": "MJ::JOB::pan_right::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
108   - "style": 2,
109   - "type": 2
110   - },
111   - {
112   - "emoji": {
113   - "name": "⬆️"
114   - },
115   - "custom_id": "MJ::JOB::pan_up::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
116   - "style": 2,
117   - "type": 2
118   - },
119   - {
120   - "emoji": {
121   - "name": "⬇️"
122   - },
123   - "custom_id": "MJ::JOB::pan_down::1::519cd956-d02e-4ae2-b62d-17c499dbbe3f::SOLO",
124   - "style": 2,
125   - "type": 2
126   - }
127   - ],
128   - "type": 1
129   - },
130   - {
131   - "components": [
132   - {
133   - "emoji": {
134   - "name": "❤️"
135   - },
136   - "custom_id": "MJ::BOOKMARK::519cd956-d02e-4ae2-b62d-17c499dbbe3f",
137   - "style": 2,
138   - "type": 2
139   - },
140   - {
141   - "style": 5,
142   - "label": "Web",
143   - "type": 2,
144   - "url": "https://www.midjourney.com/app/jobs/519cd956-d02e-4ae2-b62d-17c499dbbe3f/"
145   - }
146   - ],
147   - "type": 1
148   - }
149   - ],
150   - "attachments": [
151   - {
152   - "filename": "andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_519cd956-d02e-4ae2-b62d-17c499dbbe3f.png",
153   - "size": 2014189,
154   - "content_type": "image/png",
155   - "width": 1024,
156   - "placeholder_version": 1,
157   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234433732341927976/andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_519cd956-d02e-4ae2-b62d-17c499dbbe3f.png?ex=6630b780&is=662f6600&hm=8f273f74c29274431ec9b02bc4778a37ee944aa5360d10875cbbe512847b71c2&",
158   - "placeholder": "YwgKDwKIWGiAiYd4iGh4d4h4mKz5uZwP",
159   - "id": "1234433732341927976",
160   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234433732341927976/andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_519cd956-d02e-4ae2-b62d-17c499dbbe3f.png?ex=6630b780&is=662f6600&hm=8f273f74c29274431ec9b02bc4778a37ee944aa5360d10875cbbe512847b71c2&",
161   - "height": 1024
162   - }
163   - ],
164   - "author": {
165   - "global_name": null,
166   - "bot": true,
167   - "avatar_decoration_data": null,
168   - "clan": null,
169   - "public_flags": 589824,
170   - "id": "936929561302675456",
171   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
172   - "username": "Midjourney Bot",
173   - "discriminator": "9282"
174   - },
175   - "flags": 0,
176   - "type": 19,
177   - "mention_roles": [],
178   - "edited_timestamp": "2024-04-29T09:19:12.812177+00:00",
179   - "content": "**A girl from China, creator of ancient Chinese clothing, dances on the square** - Image #3 <@975372485971312700>",
180   - "tts": false,
181   - "mentions": [
182   - {
183   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
184   - "avatar_decoration_data": null,
185   - "member": {
186   - "premium_since": null,
187   - "nick": null,
188   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
189   - "communication_disabled_until": null,
190   - "roles": [],
191   - "pending": false,
192   - "flags": 0,
193   - "deaf": false,
194   - "mute": false,
195   - "avatar": null
196   - },
197   - "clan": null,
198   - "public_flags": 0,
199   - "id": "975372485971312700",
200   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
201   - "username": "andrakosq9211",
202   - "discriminator": "0"
203   - }
204   - ],
205   - "member": {
206   - "premium_since": null,
207   - "nick": null,
208   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
209   - "communication_disabled_until": null,
210   - "roles": [
211   - "1234355760184561747"
212   - ],
213   - "pending": false,
214   - "flags": 0,
215   - "deaf": false,
216   - "mute": false,
217   - "avatar": null
218   - },
219   - "guild_id": "1234355413420347402",
220   - "position": 0,
221   - "message_reference": {
222   - "guild_id": "1234355413420347402",
223   - "message_id": "1234433346940043294",
224   - "type": 0,
225   - "channel_id": "1234380679576424448"
226   - },
227   - "id": "1234433732761620500",
228   - "embeds": [
229   - {
230   - "color": 16711680,
231   - "description": "Hey <@975372485971312700>\nYour job queue is full. Please wait for a job to finish first, then resubmit this one.\n*[Please check the bottom of the channel for more information.](https://discord.com/channels/1234355413420347402/1234380679576424448/1234433798599606315)*",
232   - "type": "rich",
233   - "url": "https://discord.com/channels/1234355413420347402/1234380679576424448/1234433798599606315"
234   - }
235   - ],
236   - "channel_id": "1234380679576424448",
237   - "timestamp": "2024-04-29T09:18:56.560000+00:00"
238   - }
239   -}
240 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/readme.md deleted
1   -
2   -# Midjourney 消息体解析
3   -
4   -```text
5   -
6   -{
7   - "op": 0,
8   - "s": 346,
9   - "t": "MESSAGE_CREATE", // 消息类型
10   - "d": {
11   - "id": "1234498661476601907", // 唯一id
12   - "mention_everyone": false,
13   - "pinned": false,
14   - "channel_id": "1234380679576424448", // 频道id用来只区分自己频道
15   - "flags": 64, // flags 未知
16   - "type": 20, // 初步理解是用于区分消息类型
17   - "mention_roles": [],
18   - "nonce": "18", // 重点,我们传过去的唯一id,用于区分不同的绘画
19   - "application_id": "936929561302675456",
20   - "edited_timestamp": null,
21   - "content": "", // 消息内容
22   - "tts": false,
23   - "webhook_id": "936929561302675456",
24   - "mentions": [],
25   - "components": [], // U1、U2等操作
26   - "attachments": [], // 生成的图片附件
27   - "embeds": [] // 重点异常、提示、错误 都是在这个里面,这个里面有信息这个任务就不正常
28   - }
29   -}
30   -```
31   -
32   -说明:
33   -- t: 是消息类型(处理 create、和update)
34   - - MESSAGE_CREATE:会增加一条新的信息出来
35   - - MESSAGE_UPDATE:不会增加新的信息,在原来的信息上更新展示,比如进度条 10% 30%...
36   - - MESSAGE_DELETE 没啥用
37   -- components:可以理解为可以操作的按钮
38   - - 情况1:正常只有图片完成才有对于操作
39   - - 情况2:异常情况可以 submit 当前任务
40   -- attachments: 附件,在图片生成到50%左右就会开始有模糊的图片,这里面就会有照片的地址
41   -- content:正常的消息内容在这里面,一般会是一串字符串,一般有 prompt、版本、进度、状态/生成类型
42   - - 内容示例:**海贼王,在赶海! --v 6.0** - <@975372485971312700> (0%) (relaxed)
43   - - 内容示例:**海贼王,在赶海! --v 6.0** - <@975372485971312700> (35%) (relaxed)
44   -- embeds: <重点> 只有错误、警告、封号、异常里面才有信息,可以优先判断这里面有没有内容,就知道是否正常!
45   -
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/test2.json deleted
1   -{
2   - "type": 2,
3   - "application_id": "936929561302675456",
4   - "guild_id": "1237948819677904956",
5   - "channel_id": "1237948819677904960",
6   - "session_id": "4bdb0c32158f625bbd7f0a54bfbb54aa",
7   - "data": {
8   - "version": "1237876415471554623",
9   - "id": "938956540159881230",
10   - "name": "imagine",
11   - "type": 1,
12   - "options": [
13   - {
14   - "type": 3,
15   - "name": "prompt",
16   - "value": "哈哈哈"
17   - }
18   - ],
19   - "application_command": {
20   - "id": "938956540159881230",
21   - "type": 1,
22   - "application_id": "936929561302675456",
23   - "version": "1237876415471554623",
24   - "name": "imagine",
25   - "description": "Create images with Midjourney",
26   - "options": [
27   - {
28   - "type": 3,
29   - "name": "prompt",
30   - "description": "The prompt to imagine",
31   - "required": true,
32   - "description_localized": "The prompt to imagine",
33   - "name_localized": "prompt"
34   - }
35   - ],
36   - "dm_permission": true,
37   - "contexts": [
38   - 0,
39   - 1,
40   - 2
41   - ],
42   - "integration_types": [
43   - 0,
44   - 1
45   - ],
46   - "global_popularity_rank": 1,
47   - "description_localized": "Create images with Midjourney",
48   - "name_localized": "imagine"
49   - },
50   - "attachments": []
51   - },
52   - "nonce": "1238062212925358080",
53   - "analytics_location": "slash_ui"
54   -}
55 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/图片放大2倍.json deleted
1   -{
2   - "op": 0,
3   - "s": 119,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "interacted_message_id": "1234430088515293194",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234430127618658305",
17   - "type": 3,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 64,
41   - "type": 19,
42   - "mention_roles": [],
43   - "application_id": "936929561302675456",
44   - "edited_timestamp": "2024-04-29T09:06:37.616666+00:00",
45   - "content": "**A girl from China, creator of ancient Chinese clothing, dances on the square** - Zoom Out by <@975372485971312700> (22%) (relaxed)",
46   - "tts": false,
47   - "webhook_id": "936929561302675456",
48   - "mentions": [
49   - {
50   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
51   - "avatar_decoration_data": null,
52   - "clan": null,
53   - "public_flags": 0,
54   - "id": "975372485971312700",
55   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
56   - "username": "andrakosq9211",
57   - "discriminator": "0"
58   - }
59   - ],
60   - "position": 0,
61   - "message_reference": {
62   - "guild_id": "1234355413420347402",
63   - "message_id": "1234430088515293194",
64   - "type": 0,
65   - "channel_id": "1234380679576424448"
66   - },
67   - "id": "1234430128721887272",
68   - "embeds": [],
69   - "channel_id": "1234380679576424448",
70   - "timestamp": "2024-04-29T09:04:37.290000+00:00"
71   - }
72   -}
73 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/并发队列满提示.json deleted
1   -{
2   - "op": 0,
3   - "s": 5,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "975372485971312700",
12   - "name": "imagine",
13   - "authorizing_integration_owners": {
14   - "0": "1234355413420347402"
15   - },
16   - "id": "1234425115912179745",
17   - "type": 2,
18   - "user": {
19   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
20   - "avatar_decoration_data": null,
21   - "clan": null,
22   - "public_flags": 0,
23   - "id": "975372485971312700",
24   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
25   - "username": "andrakosq9211",
26   - "discriminator": "0"
27   - }
28   - },
29   - "author": {
30   - "global_name": null,
31   - "bot": true,
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 589824,
35   - "id": "936929561302675456",
36   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
37   - "username": "Midjourney Bot",
38   - "discriminator": "9282"
39   - },
40   - "flags": 64,
41   - "type": 20,
42   - "mention_roles": [],
43   - "nonce": "1234425114066419712",
44   - "application_id": "936929561302675456",
45   - "edited_timestamp": null,
46   - "content": "",
47   - "tts": false,
48   - "webhook_id": "936929561302675456",
49   - "mentions": [],
50   - "interaction": {
51   - "name": "imagine",
52   - "id": "1234425115912179745",
53   - "type": 2,
54   - "user": {
55   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
56   - "avatar_decoration_data": null,
57   - "clan": null,
58   - "public_flags": 0,
59   - "id": "975372485971312700",
60   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
61   - "username": "andrakosq9211",
62   - "discriminator": "0"
63   - }
64   - },
65   - "position": 0,
66   - "id": "1234425117380182102",
67   - "embeds": [
68   - {
69   - "content_scan_version": 0,
70   - "color": 16239475,
71   - "footer": {
72   - "text": "/imagine Cartoon car"
73   - },
74   - "description": "You have reached the maximum allowed number of concurrent jobs. Don't worry, this job will start as soon as another one finishes!",
75   - "type": "rich",
76   - "title": "Job queued"
77   - }
78   - ],
79   - "channel_id": "1234380679576424448",
80   - "timestamp": "2024-04-29T08:44:42.493000+00:00"
81   - }
82   -}
83 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/您的工作队列已满。请先等待作业完成,然后重新提交此作业。.json deleted
1   -{
2   - "op": 0,
3   - "s": 1861,
4   - "t": "MESSAGE_UPDATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "custom_id": "MJ::JOB::upsample::1::a58fcee9-ec89-4471-aff3-088615fc78f2",
13   - "style": 2,
14   - "label": "U1",
15   - "type": 2
16   - },
17   - {
18   - "custom_id": "MJ::JOB::upsample::2::a58fcee9-ec89-4471-aff3-088615fc78f2",
19   - "style": 2,
20   - "label": "U2",
21   - "type": 2
22   - },
23   - {
24   - "custom_id": "MJ::JOB::upsample::3::a58fcee9-ec89-4471-aff3-088615fc78f2",
25   - "style": 2,
26   - "label": "U3",
27   - "type": 2
28   - },
29   - {
30   - "custom_id": "MJ::JOB::upsample::4::a58fcee9-ec89-4471-aff3-088615fc78f2",
31   - "style": 2,
32   - "label": "U4",
33   - "type": 2
34   - },
35   - {
36   - "emoji": {
37   - "name": "🔄"
38   - },
39   - "custom_id": "MJ::JOB::reroll::0::a58fcee9-ec89-4471-aff3-088615fc78f2::SOLO",
40   - "style": 1,
41   - "type": 2
42   - }
43   - ],
44   - "type": 1
45   - },
46   - {
47   - "components": [
48   - {
49   - "custom_id": "MJ::JOB::variation::1::a58fcee9-ec89-4471-aff3-088615fc78f2",
50   - "style": 2,
51   - "label": "V1",
52   - "type": 2
53   - },
54   - {
55   - "custom_id": "MJ::JOB::variation::2::a58fcee9-ec89-4471-aff3-088615fc78f2",
56   - "style": 2,
57   - "label": "V2",
58   - "type": 2
59   - },
60   - {
61   - "custom_id": "MJ::JOB::variation::3::a58fcee9-ec89-4471-aff3-088615fc78f2",
62   - "style": 2,
63   - "label": "V3",
64   - "type": 2
65   - },
66   - {
67   - "custom_id": "MJ::JOB::variation::4::a58fcee9-ec89-4471-aff3-088615fc78f2",
68   - "style": 2,
69   - "label": "V4",
70   - "type": 2
71   - }
72   - ],
73   - "type": 1
74   - }
75   - ],
76   - "attachments": [
77   - {
78   - "filename": "andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_a58fcee9-ec89-4471-aff3-088615fc78f2.png",
79   - "size": 8558317,
80   - "content_type": "image/png",
81   - "width": 2688,
82   - "placeholder_version": 1,
83   - "proxy_url": "https://media.discordapp.net/attachments/1234380679576424448/1234506591949291592/andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_a58fcee9-ec89-4471-aff3-088615fc78f2.png?ex=6630fb5b&is=662fa9db&hm=ce38fbb4da6acca7a545fadf53f1bfaa3096e04fe68d24750104a2e66719f84d&",
84   - "placeholder": "YAgGBYBYFZeDa5eHegdnZ/3Erv7s",
85   - "id": "1234506591949291592",
86   - "url": "https://cdn.discordapp.com/attachments/1234380679576424448/1234506591949291592/andrakosq9211_A_girl_from_China_creator_of_ancient_Chinese_clot_a58fcee9-ec89-4471-aff3-088615fc78f2.png?ex=6630fb5b&is=662fa9db&hm=ce38fbb4da6acca7a545fadf53f1bfaa3096e04fe68d24750104a2e66719f84d&",
87   - "height": 1792
88   - }
89   - ],
90   - "author": {
91   - "global_name": null,
92   - "bot": true,
93   - "avatar_decoration_data": null,
94   - "clan": null,
95   - "public_flags": 589824,
96   - "id": "936929561302675456",
97   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
98   - "username": "Midjourney Bot",
99   - "discriminator": "9282"
100   - },
101   - "flags": 0,
102   - "type": 19,
103   - "mention_roles": [],
104   - "edited_timestamp": "2024-04-29T14:16:39.564000+00:00",
105   - "content": "**A girl from China, creator of ancient Chinese clothing, dances on the square --v 6.0 --ar 3:2** - Variations (Strong) by <@975372485971312700> (relaxed)",
106   - "tts": false,
107   - "mentions": [
108   - {
109   - "global_name": "禁止挂软件刷图,逮到删服务器,踢设备,永久拉黑!!!",
110   - "avatar_decoration_data": null,
111   - "member": {
112   - "premium_since": null,
113   - "nick": null,
114   - "joined_at": "2024-04-29T04:07:43.807000+00:00",
115   - "communication_disabled_until": null,
116   - "roles": [],
117   - "pending": false,
118   - "flags": 0,
119   - "deaf": false,
120   - "mute": false,
121   - "avatar": null
122   - },
123   - "clan": null,
124   - "public_flags": 0,
125   - "id": "975372485971312700",
126   - "avatar": "90ab939feddeaea32e23d066ce66d0e6",
127   - "username": "andrakosq9211",
128   - "discriminator": "0"
129   - }
130   - ],
131   - "member": {
132   - "premium_since": null,
133   - "nick": null,
134   - "joined_at": "2024-04-29T04:09:06.489349+00:00",
135   - "communication_disabled_until": null,
136   - "roles": [
137   - "1234355760184561747"
138   - ],
139   - "pending": false,
140   - "flags": 0,
141   - "deaf": false,
142   - "mute": false,
143   - "avatar": null
144   - },
145   - "guild_id": "1234355413420347402",
146   - "position": 0,
147   - "message_reference": {
148   - "guild_id": "1234355413420347402",
149   - "message_id": "1234503859578081381",
150   - "type": 0,
151   - "channel_id": "1234380679576424448"
152   - },
153   - "id": "1234506592565596251",
154   - "embeds": [
155   - {
156   - "color": 16711680,
157   - "description": "Hey <@975372485971312700>\nYour job queue is full. Please wait for a job to finish first, then resubmit this one.\n*[Please check the bottom of the channel for more information.](https://discord.com/channels/1234355413420347402/1234380679576424448/1234508653562826822)*",
158   - "type": "rich",
159   - "url": "https://discord.com/channels/1234355413420347402/1234380679576424448/1234508653562826822"
160   - }
161   - ],
162   - "channel_id": "1234380679576424448",
163   - "timestamp": "2024-04-29T14:08:27.691000+00:00"
164   - }
165   -}
166 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/imageGenerationProcess/队列满.json deleted
1   -{
2   - "op": 0,
3   - "s": 34,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [
9   - {
10   - "components": [
11   - {
12   - "custom_id": "MJ::Job::Retry::64a7ec94-9607-492e-99ac-8550a4e7faf2",
13   - "style": 2,
14   - "label": "Resubmit",
15   - "type": 2
16   - }
17   - ],
18   - "type": 1
19   - }
20   - ],
21   - "attachments": [],
22   - "interaction_metadata": {
23   - "user_id": "976067621160108072",
24   - "name": "imagine",
25   - "authorizing_integration_owners": {
26   - "0": "1234483730148626542"
27   - },
28   - "id": "1234491017005105172",
29   - "type": 2,
30   - "user": {
31   - "global_name": "Sequoiab",
32   - "avatar_decoration_data": null,
33   - "clan": null,
34   - "public_flags": 0,
35   - "id": "976067621160108072",
36   - "avatar": "2ef47ed59695ff8bcdc2254f5189b70c",
37   - "username": "sequoiab2281",
38   - "discriminator": "0"
39   - }
40   - },
41   - "author": {
42   - "global_name": null,
43   - "bot": true,
44   - "avatar_decoration_data": null,
45   - "clan": null,
46   - "public_flags": 589824,
47   - "id": "936929561302675456",
48   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
49   - "username": "Midjourney Bot",
50   - "discriminator": "9282"
51   - },
52   - "flags": 64,
53   - "type": 20,
54   - "mention_roles": [],
55   - "nonce": "1234491015356743680",
56   - "application_id": "936929561302675456",
57   - "edited_timestamp": null,
58   - "content": "",
59   - "tts": false,
60   - "webhook_id": "936929561302675456",
61   - "mentions": [],
62   - "interaction": {
63   - "name": "imagine",
64   - "id": "1234491017005105172",
65   - "type": 2,
66   - "user": {
67   - "global_name": "Sequoiab",
68   - "avatar_decoration_data": null,
69   - "clan": null,
70   - "public_flags": 0,
71   - "id": "976067621160108072",
72   - "avatar": "2ef47ed59695ff8bcdc2254f5189b70c",
73   - "username": "sequoiab2281",
74   - "discriminator": "0"
75   - }
76   - },
77   - "position": 0,
78   - "id": "1234491019211575376",
79   - "embeds": [
80   - {
81   - "content_scan_version": 0,
82   - "color": 16711680,
83   - "footer": {
84   - "text": "/imagine Doctor Strange vs. Ultraman --v 6"
85   - },
86   - "description": "Your job queue is full. Please wait for a job to finish first, then resubmit this one.",
87   - "type": "rich",
88   - "title": "Queue full"
89   - }
90   - ],
91   - "channel_id": "1234490728575533057",
92   - "timestamp": "2024-04-29T13:06:34.714000+00:00"
93   - }
94   -}
95 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/interactions_type2.json deleted
1   -{
2   - "type": 2,
3   - "application_id": "936929561302675456",
4   - "guild_id": "1221445697157468200",
5   - "channel_id": "1221445862962630706",
6   - "session_id": "696318caed5180a2210e358e44801449",
7   - "data": {
8   - "version": "1166847114203123795",
9   - "id": "938956540159881230",
10   - "name": "imagine",
11   - "type": 1,
12   - "options": [
13   - {
14   - "type": 3,
15   - "name": "prompt",
16   - "value": "童话世界应该是什么样?"
17   - }
18   - ],
19   - "application_command": {
20   - "id": "938956540159881230",
21   - "type": 1,
22   - "application_id": "936929561302675456",
23   - "version": "1166847114203123795",
24   - "name": "imagine",
25   - "description": "Create images with Midjourney",
26   - "options": [
27   - {
28   - "type": 3,
29   - "name": "prompt",
30   - "description": "The prompt to imagine",
31   - "required": true,
32   - "description_localized": "The prompt to imagine",
33   - "name_localized": "prompt"
34   - }
35   - ],
36   - "dm_permission": true,
37   - "integration_types": [
38   - 0
39   - ],
40   - "global_popularity_rank": 1,
41   - "description_localized": "Create images with Midjourney",
42   - "name_localized": "imagine"
43   - },
44   - "attachments": []
45   - },
46   - "nonce": "1224342266261274624",
47   - "analytics_location": "slash_ui"
48   -}
49 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/interactions_type3.json deleted
1   -{
2   - "type": 3,
3   - "nonce": "1224397626158350336",
4   - "guild_id": "1224337694918971392",
5   - "channel_id": "1224337694918971396",
6   - "message_flags": 64,
7   - "message_id": "1224397599197368330",
8   - "application_id": "936929561302675456",
9   - "session_id": "0d9ae3c799f2fb55ff435df5e6deb121",
10   - "data": {
11   - "component_type": 2,
12   - "custom_id": "MJ::ModMsg::Ack::2744093999977583880"
13   - }
14   -}
15 0 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/requestTestJson/job-message.json deleted
1   -{
2   - "op": 0,
3   - "s": 10,
4   - "t": "MESSAGE_CREATE",
5   - "d": {
6   - "mention_everyone": false,
7   - "pinned": false,
8   - "components": [],
9   - "attachments": [],
10   - "interaction_metadata": {
11   - "user_id": "972721304891453450",
12   - "name": "blend",
13   - "authorizing_integration_owners": {
14   - "0": "1225608134878302329"
15   - },
16   - "id": "1226901083708723310",
17   - "type": 2
18   - },
19   - "author": {
20   - "global_name": null,
21   - "bot": true,
22   - "avatar_decoration_data": null,
23   - "public_flags": 589824,
24   - "id": "936929561302675456",
25   - "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76",
26   - "username": "Midjourney Bot",
27   - "discriminator": "9282"
28   - },
29   - "flags": 64,
30   - "type": 20,
31   - "mention_roles": [],
32   - "nonce": "1226901080604934144",
33   - "application_id": "936929561302675456",
34   - "edited_timestamp": null,
35   - "content": "",
36   - "tts": false,
37   - "webhook_id": "936929561302675456",
38   - "mentions": [],
39   - "interaction": {
40   - "name": "blend",
41   - "id": "1226901083708723310",
42   - "type": 2,
43   - "user": {
44   - "global_name": "tiger",
45   - "avatar_decoration_data": null,
46   - "public_flags": 0,
47   - "id": "972721304891453450",
48   - "avatar": "3646118d04fd12dfd301c4fd17afd801",
49   - "username": "jverbalu4990",
50   - "discriminator": "0"
51   - }
52   - },
53   - "position": 0,
54   - "id": "1226901087286591558",
55   - "embeds": [
56   - {
57   - "content_scan_version": 0,
58   - "color": 16239475,
59   - "footer": {
60   - "text": "/imagine https://cdn.discordapp.com/ephemeral-attachments/1062880104792997970/1226901079514419221/srchttp___c-ssl.duitang.com_uploads_item_202001_20_20200120152231_lncpq.thumb.1000_0.jpgreferhttp___c-ssl.duitang.webp?ex=662673ac&is=6613feac&hm=bf9a400940c747fa869b8e4bf2a38238639b67b4b5e799ce1ef2c1f42bab178f& https://cdn.discordapp.com/ephemeral-attachments/1062880104792997970/1226901080970100736/xiyangyang20151021171455974.png?ex=662673ac&is=6613feac&hm=9c8f42ad2dfb1963a9e424c1942c59568544faed4d38f94b678bfcaa60f47b04& --v 5.2 --s 250"
61   - },
62   - "description": "You have reached the maximum allowed number of concurrent jobs. Don't worry, this job will start as soon as another one finishes!",
63   - "type": "rich",
64   - "title": "Job queued"
65   - }
66   - ],
67   - "channel_id": "1225608134878302332",
68   - "timestamp": "2024-04-08T14:26:53.929000+00:00"
69   - }
70   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyInteractionsTests.java deleted
1   -package cn.iocoder.yudao.framework.ai.midjourney;
2   -
3   -import cn.hutool.core.io.FileUtil;
4   -import cn.hutool.core.util.IdUtil;
5   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
6   -import org.springframework.ai.models.midjourney.api.MidjourneyInteractionsApi;
7   -import org.springframework.ai.models.midjourney.api.req.AttachmentsReq;
8   -import org.springframework.ai.models.midjourney.api.req.DescribeReq;
9   -import org.springframework.ai.models.midjourney.api.req.ReRollReq;
10   -import org.springframework.ai.models.midjourney.api.res.UploadAttachmentsRes;
11   -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
12   -import org.junit.Before;
13   -import org.junit.Test;
14   -import org.springframework.core.io.FileSystemResource;
15   -
16   -import java.io.File;
17   -import java.util.HashMap;
18   -import java.util.List;
19   -import java.util.Map;
20   -
21   -/**
22   - * mj
23   - *
24   - * author: fansili
25   - * time: 2024/4/4 18:59
26   - */
27   -public class MidjourneyInteractionsTests {
28   -
29   - private MidjourneyConfig midjourneyConfig;
30   - @Before
31   - public void setup() {
32   - String token = "OTcyNzIxMzA0ODkxNDUzNDUw.G_vMOz.BO_Q0sXAD80u5ZKIHPNYDTRX_FgeKL3cKFc53I";
33   - Map<String, String> requestTemplates = new HashMap<>();
34   - List<File> files = FileUtil.loopFiles("/Users/fansili/projects/github/ruoyi-vue-pro/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body");
35   - for (File file : files) {
36   - requestTemplates.put(file.getName().replace(".json", ""), FileUtil.readUtf8String(file));
37   - }
38   - this.midjourneyConfig = new MidjourneyConfig(token, "1225608134878302329", "1225608134878302332", requestTemplates);
39   - }
40   -
41   - @Test
42   - public void mjImageTest() {
43   - MidjourneyInteractionsApi mjImagineInteractions = new MidjourneyInteractionsApi(midjourneyConfig);
44   - mjImagineInteractions.imagine(String.valueOf(IdUtil.getSnowflakeNextId()), "童话里应该是什么样子?");
45   - }
46   -
47   -
48   - @Test
49   - public void reRollTest() {
50   - MidjourneyInteractionsApi mjImagineInteractions = new MidjourneyInteractionsApi(midjourneyConfig);
51   - mjImagineInteractions.reRoll(new ReRollReq()
52   - .setMessageId("1226165117448753243")
53   - .setCustomId("MJ::JOB::upsample::3::2aeefbef-43e2-4057-bcf1-43b5f39ab6f7"));
54   - }
55   -
56   - @Test
57   - public void uploadAttachmentsTest() {
58   - MidjourneyInteractionsApi mjImagineInteractions = new MidjourneyInteractionsApi(midjourneyConfig);
59   - UploadAttachmentsRes res = mjImagineInteractions.uploadAttachments(
60   - new AttachmentsReq().setFileSystemResource(
61   - new FileSystemResource(new File("/Users/fansili/Downloads/DSC01402.JPG")))
62   - );
63   - System.err.println(JsonUtils.toJsonString(res));
64   - }
65   -
66   - @Test
67   - public void describeTest() {
68   - MidjourneyInteractionsApi mjImagineInteractions = new MidjourneyInteractionsApi(midjourneyConfig);
69   - mjImagineInteractions.describe(new DescribeReq()
70   - .setFileName("DSC01402.JPG")
71   - .setFinalFileName("16826931-2873-45ec-8cfb-0ad81f1a075f/DSC01402.JPG")
72   - );
73   - }
74   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyUtilTests.java deleted
1   -package cn.iocoder.yudao.framework.ai.midjourney;
2   -
3   -import org.springframework.ai.models.midjourney.util.MidjourneyUtil;
4   -import org.junit.Test;
5   -
6   -/**
7   - * mj util
8   - *
9   - * author: fansili
10   - * time: 2024/4/6 21:57
11   - */
12   -public class MidjourneyUtilTests {
13   -
14   - @Test
15   - public void parseContentTest() {
16   - String content1 = "**南极应该是什么样子? --v 6.0 --style raw** - <@972721304891453450> (32%) (fast, stealth)";
17   - String content2 = "**南极应该是什么样子? --v 6.0 --style raw** - <@972721304891453450> (fast, stealth)";
18   -
19   - System.err.println(MidjourneyUtil.parseContent(content1));
20   - System.err.println(MidjourneyUtil.parseContent(content2));
21   - }
22   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/midjourney/MidjourneyWebSocketTests.java deleted
1   -package cn.iocoder.yudao.framework.ai.midjourney;
2   -
3   -import cn.hutool.core.io.FileUtil;
4   -import org.springframework.ai.models.midjourney.MidjourneyConfig;
5   -import org.springframework.ai.models.midjourney.webSocket.WssNotify;
6   -import org.springframework.ai.models.midjourney.webSocket.listener.MidjourneyMessageListener;
7   -import org.springframework.ai.models.midjourney.webSocket.MidjourneyWebSocketStarter;
8   -import org.junit.Before;
9   -import org.junit.Test;
10   -
11   -import java.io.File;
12   -import java.util.HashMap;
13   -import java.util.List;
14   -import java.util.Map;
15   -import java.util.Scanner;
16   -
17   -/**
18   - * author: fansili
19   - * time: 2024/4/3 16:40
20   - */
21   -public class MidjourneyWebSocketTests {
22   -
23   - private MidjourneyConfig midjourneyConfig;
24   -
25   - @Before
26   - public void setup() {
27   - String token = "OTcyNzIxMzA0ODkxNDUzNDUw.G_vMOz.BO_Q0sXAD80u5ZKIHPNYDTRX_FgeKL3cKFc53I";
28   - Map<String, String> requestTemplates = new HashMap<>();
29   - List<File> files = FileUtil.loopFiles("/Users/fansili/projects/github/ruoyi-vue-pro/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/http-body");
30   - for (File file : files) {
31   - requestTemplates.put(file.getName().replace(".json", ""), FileUtil.readUtf8String(file));
32   - }
33   - this.midjourneyConfig = new MidjourneyConfig(token, "1225608134878302329", "1225608134878302332", requestTemplates);
34   - }
35   -
36   - @Test
37   - public void startSocketTest() {
38   - String wssUrl = "wss://gateway.discord.gg";
39   - var messageListener = new MidjourneyMessageListener(midjourneyConfig);
40   - var webSocketStarter = new MidjourneyWebSocketStarter(wssUrl, null, midjourneyConfig, messageListener);
41   -
42   - try {
43   - webSocketStarter.start(new WssNotify() {
44   - @Override
45   - public void notify(int code, String message) {
46   -
47   - }
48   - });
49   - } catch (Exception e) {
50   - throw new RuntimeException(e);
51   - }
52   -
53   -
54   - Scanner scanner = new Scanner(System.in);
55   - scanner.nextLine();
56   - }
57   -}
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/openAiImage/OpenAiImageClientTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/openai/OpenAiImageClientTests.java
1   -package cn.iocoder.yudao.framework.ai.openAiImage;
  1 +package cn.iocoder.yudao.framework.ai.openai;
2 2  
3 3 import org.springframework.ai.image.ImagePrompt;
4 4 import org.springframework.ai.image.ImageResponse;
5 5 import org.junit.Before;
6 6 import org.junit.Test;
7   -import org.springframework.ai.openai.OpenAiChatClient;
8 7 import org.springframework.ai.openai.OpenAiImageClient;
9   -import org.springframework.ai.openai.OpenAiImageOptions;
10   -import org.springframework.ai.openai.api.OpenAiApi;
11 8 import org.springframework.ai.openai.api.OpenAiImageApi;
12   -import reactor.core.publisher.Flux;
13 9  
14 10 import javax.imageio.ImageIO;
15 11 import javax.swing.*;
... ... @@ -18,7 +14,6 @@ import java.io.ByteArrayInputStream;
18 14 import java.io.IOException;
19 15 import java.util.Base64;
20 16 import java.util.Scanner;
21   -import java.util.function.Function;
22 17  
23 18 /**
24 19 * author: fansili
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/package-info.java deleted
1   -/**
2   - * author: fansili
3   - * time: 2024/3/12 21:03
4   - */
5   -package cn.iocoder.yudao.framework.ai;
6 0 \ No newline at end of file