From 102ed79f417de08efedffb3dc19ed5275f1c0883 Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 20:50:59 +0800 Subject: [PATCH 01/16] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9EKeywordConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ashin/config/KeywordConfig.java | 19 +++++++++++++++++++ src/main/java/com/ashin/config/QqConfig.java | 1 - .../java/com/ashin/config/WechatConfig.java | 1 - .../com/ashin/handler/QqMessageHandler.java | 5 ++++- .../ashin/handler/WechatMessageHandler.java | 5 +++-- src/main/resources/application.yml | 7 +++++-- 6 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/ashin/config/KeywordConfig.java diff --git a/src/main/java/com/ashin/config/KeywordConfig.java b/src/main/java/com/ashin/config/KeywordConfig.java new file mode 100644 index 0000000..f097506 --- /dev/null +++ b/src/main/java/com/ashin/config/KeywordConfig.java @@ -0,0 +1,19 @@ +package com.ashin.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 关键字配置 + * + * @author ashinnotfound + * @date 2023/08/10 + */ +@Data +@Component +@ConfigurationProperties("keyword") +public class KeywordConfig { + private String resetWord; + private String imageGeneration; +} diff --git a/src/main/java/com/ashin/config/QqConfig.java b/src/main/java/com/ashin/config/QqConfig.java index 6505540..248b4ba 100644 --- a/src/main/java/com/ashin/config/QqConfig.java +++ b/src/main/java/com/ashin/config/QqConfig.java @@ -20,5 +20,4 @@ public class QqConfig { private String password; private Boolean acceptNewFriend; private Boolean acceptNewGroup; - private String resetWord; } \ No newline at end of file diff --git a/src/main/java/com/ashin/config/WechatConfig.java b/src/main/java/com/ashin/config/WechatConfig.java index ca6017c..9e1b2dd 100644 --- a/src/main/java/com/ashin/config/WechatConfig.java +++ b/src/main/java/com/ashin/config/WechatConfig.java @@ -16,5 +16,4 @@ public class WechatConfig { private Boolean enable; private String qrPath; - private String resetWord; } diff --git a/src/main/java/com/ashin/handler/QqMessageHandler.java b/src/main/java/com/ashin/handler/QqMessageHandler.java index 542f829..afbdfff 100644 --- a/src/main/java/com/ashin/handler/QqMessageHandler.java +++ b/src/main/java/com/ashin/handler/QqMessageHandler.java @@ -1,5 +1,6 @@ package com.ashin.handler; +import com.ashin.config.KeywordConfig; import com.ashin.config.QqConfig; import com.ashin.entity.bo.ChatBO; import com.ashin.exception.ChatException; @@ -30,6 +31,8 @@ public class QqMessageHandler implements ListenerHost { @Resource private QqConfig qqConfig; @Resource + private KeywordConfig keywordConfig; + @Resource private BotUtil botUtil; /** @@ -62,7 +65,7 @@ public void onGroupMessageEvent(GroupMessageEvent event){ } } private void response(@NotNull MessageEvent event, ChatBO chatBO, String prompt) { - if (qqConfig.getResetWord().equals(prompt)) { + if (keywordConfig.getResetWord().equals(prompt)) { //检测到重置会话指令 botUtil.resetPrompt(chatBO.getSessionId()); event.getSubject().sendMessage("重置会话成功"); diff --git a/src/main/java/com/ashin/handler/WechatMessageHandler.java b/src/main/java/com/ashin/handler/WechatMessageHandler.java index 40c9f2e..967b998 100644 --- a/src/main/java/com/ashin/handler/WechatMessageHandler.java +++ b/src/main/java/com/ashin/handler/WechatMessageHandler.java @@ -1,5 +1,6 @@ package com.ashin.handler; +import com.ashin.config.KeywordConfig; import com.ashin.config.WechatConfig; import com.ashin.entity.bo.ChatBO; import com.ashin.exception.ChatException; @@ -23,7 +24,7 @@ public class WechatMessageHandler implements IMsgHandlerFace { @Resource private InteractService interactService; @Resource - private WechatConfig wechatConfig; + private KeywordConfig keywordConfig; @Resource private BotUtil botUtil; @@ -45,7 +46,7 @@ public String textMsgHandle(BaseMsg baseMsg) { } private String textResponse(String userName, String content) { - if (wechatConfig.getResetWord().equals(content)){ + if (keywordConfig.getResetWord().equals(content)){ botUtil.resetPrompt(userName); return "重置会话成功"; }else { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1d59b5c..c2396e4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -33,13 +33,16 @@ qq: acceptNewFriend: false # 是否自动同意被邀请入群 acceptNewGroup: false - # 重置会话指令 - resetWord: "重置会话" wechat: # 是否使用微信 true/false enable: false # 生成的登录二维码路径 默认与项目同级 qrPath: "./" + +keyword: # 重置会话指令 resetWord: "重置会话" + # ai画图指令(DALL·E模型 https://platform.openai.com/docs/models/dall-e) + # generation 根据关键词生成图片(https://platform.openai.com/docs/guides/images/generations) + imageGeneration: "ai生成图片" From 86e7995a1334bd74d8547ce01ac7b58c4dabcefa Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 20:55:50 +0800 Subject: [PATCH 02/16] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=97=B6=E9=97=B4ofSeconds=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ashin/client/GptClient.java | 2 +- src/main/java/com/ashin/config/GptConfig.java | 1 + src/main/resources/application.yml | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ashin/client/GptClient.java b/src/main/java/com/ashin/client/GptClient.java index fed2376..50c26d8 100644 --- a/src/main/java/com/ashin/client/GptClient.java +++ b/src/main/java/com/ashin/client/GptClient.java @@ -39,7 +39,7 @@ public void init() { for (String apiKey : gptConfig.getApiKey()) { apiKey = apiKey.trim(); if (!apiKey.isEmpty()) { - openAiServiceList.add(new OpenAiService(apiKey, Duration.ofSeconds(1000))); + openAiServiceList.add(new OpenAiService(apiKey, Duration.ofSeconds(gptConfig.getOfSeconds()))); log.info("apiKey为 {} 的账号初始化成功", apiKey); } } diff --git a/src/main/java/com/ashin/config/GptConfig.java b/src/main/java/com/ashin/config/GptConfig.java index cfef2a5..8b23bbe 100644 --- a/src/main/java/com/ashin/config/GptConfig.java +++ b/src/main/java/com/ashin/config/GptConfig.java @@ -21,4 +21,5 @@ public class GptConfig { private Double temperature; private List basicPrompt; private List apiKey; + private Long ofSeconds; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c2396e4..7f87ff2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -14,6 +14,8 @@ gpt: maxToken: 2048 # 信息熵 越高回答越随机(Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.---via OPENAI) temperature: 0.5 + # 最大请求时间 超时自动中断请求 + ofSeconds: 10000 # 基础提问 支持多个提问 可用来设定人格(对应api中的system角色) basicPrompt: - "用中文回答我的问题" From 1922684f2950c5524617ad4d91adb2cdaef8ff8c Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 21:45:50 +0800 Subject: [PATCH 03/16] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=B0=83=E7=94=A8?= =?UTF-8?q?DALL-E=E6=A8=A1=E5=9E=8B=E7=9A=84generation=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ashin/entity/bo/ChatBO.java | 4 +++ .../com/ashin/handler/QqMessageHandler.java | 1 + .../ashin/handler/WechatMessageHandler.java | 2 +- .../service/impl/InteractServiceImpl.java | 32 +++++++++++++------ 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/ashin/entity/bo/ChatBO.java b/src/main/java/com/ashin/entity/bo/ChatBO.java index b7b71f8..208b4b8 100644 --- a/src/main/java/com/ashin/entity/bo/ChatBO.java +++ b/src/main/java/com/ashin/entity/bo/ChatBO.java @@ -18,4 +18,8 @@ public class ChatBO { * 问题 */ private String prompt; + /** + * 是否ai画图功能 + */ + private boolean isAiDraw; } diff --git a/src/main/java/com/ashin/handler/QqMessageHandler.java b/src/main/java/com/ashin/handler/QqMessageHandler.java index afbdfff..a1e040b 100644 --- a/src/main/java/com/ashin/handler/QqMessageHandler.java +++ b/src/main/java/com/ashin/handler/QqMessageHandler.java @@ -73,6 +73,7 @@ private void response(@NotNull MessageEvent event, ChatBO chatBO, String prompt) String response; try { chatBO.setPrompt(prompt); + chatBO.setAiDraw(prompt.startsWith(keywordConfig.getImageGeneration())); response = interactService.chat(chatBO); }catch (ChatException e){ response = e.getMessage(); diff --git a/src/main/java/com/ashin/handler/WechatMessageHandler.java b/src/main/java/com/ashin/handler/WechatMessageHandler.java index 967b998..b841ca8 100644 --- a/src/main/java/com/ashin/handler/WechatMessageHandler.java +++ b/src/main/java/com/ashin/handler/WechatMessageHandler.java @@ -1,7 +1,6 @@ package com.ashin.handler; import com.ashin.config.KeywordConfig; -import com.ashin.config.WechatConfig; import com.ashin.entity.bo.ChatBO; import com.ashin.exception.ChatException; import com.ashin.service.InteractService; @@ -53,6 +52,7 @@ private String textResponse(String userName, String content) { ChatBO chatBO = new ChatBO(); chatBO.setPrompt(content); chatBO.setSessionId(userName); + chatBO.setAiDraw(content.startsWith(keywordConfig.getImageGeneration())); String response; try { response = interactService.chat(chatBO); diff --git a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java index 2ae1044..bddbd61 100644 --- a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java +++ b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java @@ -1,5 +1,6 @@ package com.ashin.service.impl; +import com.ashin.config.KeywordConfig; import com.ashin.entity.bo.ChatBO; import com.ashin.exception.ChatException; import com.ashin.service.InteractService; @@ -7,6 +8,7 @@ import com.theokanning.openai.OpenAiHttpException; import com.theokanning.openai.completion.chat.ChatCompletionRequest; import com.theokanning.openai.completion.chat.ChatMessage; +import com.theokanning.openai.image.CreateImageRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,34 +27,44 @@ public class InteractServiceImpl implements InteractService { @Resource private BotUtil botUtil; + @Resource + private KeywordConfig keywordConfig; @Override public String chat(ChatBO chatBO) throws ChatException { List prompt = botUtil.buildPrompt(chatBO.getSessionId(), chatBO.getPrompt()); - if (prompt == null){ + if (prompt == null) { throw new ChatException("提问失败: 提问内容过长"); } - //向gpt提问 - ChatCompletionRequest completionRequest = botUtil.getCompletionRequestBuilder().messages(prompt).build(); ChatMessage answer = null; try { - answer = botUtil.getOpenAiService().createChatCompletion(completionRequest).getChoices().get(0).getMessage(); - }catch (OpenAiHttpException e){ + //向gpt提问 + if (chatBO.isAiDraw()) { + String description = chatBO.getPrompt().replaceFirst(keywordConfig.getImageGeneration() + " ", ""); + CreateImageRequest createImageRequest = CreateImageRequest.builder().n(1).size("1024x1024").prompt(description).build(); + answer = new ChatMessage(); + answer.setRole("assistant"); + answer.setContent(botUtil.getOpenAiService().createImage(createImageRequest).getData().get(0).getUrl()); + } else { + ChatCompletionRequest completionRequest = botUtil.getCompletionRequestBuilder().messages(prompt).build(); + answer = botUtil.getOpenAiService().createChatCompletion(completionRequest).getChoices().get(0).getMessage(); + } + } catch (OpenAiHttpException e) { log.error("向gpt提问失败,提问内容:{},\n原因:{}\n", chatBO.getPrompt(), e.getMessage(), e); // https://platform.openai.com/docs/guides/error-codes/api-errors - if (401 == e.statusCode){ + if (401 == e.statusCode) { throw new ChatException("提问失败: 无效的apikey, 请确保apikey正确且你拥有权限"); - }else if(429 == e.statusCode){ + } else if (429 == e.statusCode) { throw new ChatException("提问过于频繁 或者 apikey余额不足"); - }else if(500 == e.statusCode) { + } else if (500 == e.statusCode) { throw new ChatException("提问失败: openai服务异常, 请稍后重试"); - }else if(503 == e.statusCode) { + } else if (503 == e.statusCode) { throw new ChatException("提问失败: openai服务过载, 请稍后重试"); } } - if (null == answer){ + if (null == answer) { throw new ChatException("提问失败: 未知错误, 若频繁出现请提issue"); } From 9aade88159d2874e5f4a63d8c87d7295d7683852 Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 21:49:34 +0800 Subject: [PATCH 04/16] dump version into beta-3.8.1 --- README.md | 5 ++++- pom.xml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4478ae5..456249b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # ChatGPT-YourChatRobot -> ### NEWS: 最近有空能闲下来看看这个项目,主要更新了项目依赖、优化了下代码结构、增加了token消耗的计算、优化了bot交互返回信息🤗🤗🤗 --- 2023.8.8 +> ### NEWS: 正在尝试接入OPENAI的ai画图功能([DALL·E模型](https://platform.openai.com/docs/models/dall-e)) +> - 无需为此功能额外配置apikey,使用原先的即可 +> - 可先在feat/image分支或release里的beta版试用 +> - --- 2023.8.10 ## 简介 diff --git a/pom.xml b/pom.xml index 15b42d3..f0afdf6 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.ashin ChatGPT-YourChatRobot - 3.7 + beta-3.8.1 myGPT 快来把你的qq或微信变为chatgpt From d25f4ee023e10296624993107d70f6407d0d5c4e Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 22:06:46 +0800 Subject: [PATCH 05/16] update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 456249b..2ddeca4 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ > - 无需为此功能额外配置apikey,使用原先的即可 > - 可先在feat/image分支或release里的beta版试用 > - --- 2023.8.10 +> +> ## 简介 @@ -137,7 +139,7 @@ tips:机器人响应速度与你的网络环境挂钩。 - 最近qq机器人使用密码登录极其不稳定,新增了扫码登陆,算是个补充方案,一定程度上能解决登陆失败的问题。 - qq机器人基于[TheoKanning/openai-java](https://github.com/TheoKanning/openai-java)和[mamoe/mirai](https://github.com/mamoe/mirai.git) - 微信机器人基于[TheoKanning/openai-java](https://github.com/TheoKanning/openai-java)和[wxmbaci/itchat4j-uos](https://github.com/wxmbaci/itchat4j-uos) - + ### v3.5 (Mar 19, 2023) - 今天在github冲浪的时候发现,2023了竟然还有能用的java微信sdk!!! - 现在你也可以将微信也变成chatgpt了🥰🥰🥰 From 835e6944bdcccbe7015ea0f8d72b776ae2b28e53 Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Thu, 10 Aug 2023 22:16:16 +0800 Subject: [PATCH 06/16] update README.md --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 456249b..348cadf 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ > - 无需为此功能额外配置apikey,使用原先的即可 > - 可先在feat/image分支或release里的beta版试用 > - --- 2023.8.10 +> +> ## 简介 @@ -63,6 +65,8 @@ gpt: maxToken: 2048 # 信息熵 越高回答越随机(Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.---via OPENAI) temperature: 0.5 + # 最大请求时间 超时自动中断请求 + ofSeconds: 10000 # 基础提问 支持多个提问 可用来设定人格(对应api中的system角色) basicPrompt: - "用中文回答我的问题" @@ -82,16 +86,19 @@ qq: acceptNewFriend: false # 是否自动同意被邀请入群 acceptNewGroup: false - # 重置会话指令 - resetWord: "重置会话" wechat: # 是否使用微信 true/false enable: false # 生成的登录二维码路径 默认与项目同级 qrPath: "./" + +keyword: # 重置会话指令 resetWord: "重置会话" + # ai画图指令(DALL·E模型 https://platform.openai.com/docs/models/dall-e) + # generation 根据关键词生成图片(https://platform.openai.com/docs/guides/images/generations) + imageGeneration: "ai生成图片" ``` 3. 然后 run!!!😁😁😁 @@ -137,7 +144,7 @@ tips:机器人响应速度与你的网络环境挂钩。 - 最近qq机器人使用密码登录极其不稳定,新增了扫码登陆,算是个补充方案,一定程度上能解决登陆失败的问题。 - qq机器人基于[TheoKanning/openai-java](https://github.com/TheoKanning/openai-java)和[mamoe/mirai](https://github.com/mamoe/mirai.git) - 微信机器人基于[TheoKanning/openai-java](https://github.com/TheoKanning/openai-java)和[wxmbaci/itchat4j-uos](https://github.com/wxmbaci/itchat4j-uos) - + ### v3.5 (Mar 19, 2023) - 今天在github冲浪的时候发现,2023了竟然还有能用的java微信sdk!!! - 现在你也可以将微信也变成chatgpt了🥰🥰🥰 From 75317c9fcadb2e04be5e87271f9ea9a454f367b0 Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Wed, 16 Aug 2023 16:40:18 +0800 Subject: [PATCH 07/16] =?UTF-8?q?improvement(service):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=B9400=E9=94=99=E8=AF=AF=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ashin/service/impl/InteractServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java index bddbd61..d24643d 100644 --- a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java +++ b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java @@ -54,10 +54,12 @@ public String chat(ChatBO chatBO) throws ChatException { } catch (OpenAiHttpException e) { log.error("向gpt提问失败,提问内容:{},\n原因:{}\n", chatBO.getPrompt(), e.getMessage(), e); // https://platform.openai.com/docs/guides/error-codes/api-errors - if (401 == e.statusCode) { + if (400 == e.statusCode) { + throw new ChatException("提问失败: 你的提问被OPENAI安全系统拒绝,请检查是否有敏感词等"); + } else if (401 == e.statusCode) { throw new ChatException("提问失败: 无效的apikey, 请确保apikey正确且你拥有权限"); } else if (429 == e.statusCode) { - throw new ChatException("提问过于频繁 或者 apikey余额不足"); + throw new ChatException("提问失败: 提问过于频繁 或者 apikey余额不足"); } else if (500 == e.statusCode) { throw new ChatException("提问失败: openai服务异常, 请稍后重试"); } else if (503 == e.statusCode) { From 73388e555a3d6d2bd10fdd1e924d60e76e9180ee Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Sat, 19 Aug 2023 15:58:37 +0800 Subject: [PATCH 08/16] =?UTF-8?q?improvement(service):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=B9=E7=BD=91=E7=BB=9C=E5=BC=82=E5=B8=B8=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ashin/service/impl/InteractServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java index d24643d..3c83a97 100644 --- a/src/main/java/com/ashin/service/impl/InteractServiceImpl.java +++ b/src/main/java/com/ashin/service/impl/InteractServiceImpl.java @@ -65,6 +65,8 @@ public String chat(ChatBO chatBO) throws ChatException { } else if (503 == e.statusCode) { throw new ChatException("提问失败: openai服务过载, 请稍后重试"); } + } catch (RuntimeException e) { + throw new ChatException("提问失败: 大概率网络异常, 具体: " + e.getMessage()); } if (null == answer) { throw new ChatException("提问失败: 未知错误, 若频繁出现请提issue"); From 84af398635d7572c250622daa11f81f9600f7a31 Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Sat, 19 Aug 2023 17:20:33 +0800 Subject: [PATCH 09/16] =?UTF-8?q?feat(util):=20=E6=96=B0=E5=A2=9E=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=9B=BE=E7=89=87=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ashin/util/ImageUtil.java | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/com/ashin/util/ImageUtil.java diff --git a/src/main/java/com/ashin/util/ImageUtil.java b/src/main/java/com/ashin/util/ImageUtil.java new file mode 100644 index 0000000..07b69f8 --- /dev/null +++ b/src/main/java/com/ashin/util/ImageUtil.java @@ -0,0 +1,50 @@ +package com.ashin.util; + +import lombok.extern.slf4j.Slf4j; +import net.mamoe.mirai.internal.deps.okhttp3.OkHttpClient; +import net.mamoe.mirai.internal.deps.okhttp3.Request; +import net.mamoe.mirai.internal.deps.okhttp3.Response; +import net.mamoe.mirai.internal.deps.okhttp3.ResponseBody; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * 图像工具类 + * + * @author ashinnotfound + * @date 2023/08/16 + */ +@Slf4j +public class ImageUtil { + public static File download(String imageUrl) { + log.info("正在下载图片({})", imageUrl); + String savePath = System.currentTimeMillis() + ".jpg"; // 保存图片的文件路径和名称 + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(imageUrl) + .build(); + + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + ResponseBody responseBody = response.body(); + if (responseBody != null) { + try (FileOutputStream outputStream = new FileOutputStream(savePath)) { + outputStream.write(responseBody.bytes()); + } + } + } else { + log.error("图片下载失败: 无法连接到URL,HTTP响应码 {}", response.code()); + } + } catch (IOException e) { + log.error("图片下载失败: {}", e.getMessage()); + } + + File file = new File(savePath); + log.info("图片下载完成!({})", file.getPath()); + return file; + } +} From fe72fc095430cd22cacbf8aa75a6c845970b4a9a Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Sat, 19 Aug 2023 17:22:24 +0800 Subject: [PATCH 10/16] =?UTF-8?q?improvement(handler):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BAqq=E7=9B=B4=E6=8E=A5=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=80=8C=E4=B8=8D=E6=98=AF=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ashin/handler/QqMessageHandler.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ashin/handler/QqMessageHandler.java b/src/main/java/com/ashin/handler/QqMessageHandler.java index a1e040b..d6b4216 100644 --- a/src/main/java/com/ashin/handler/QqMessageHandler.java +++ b/src/main/java/com/ashin/handler/QqMessageHandler.java @@ -6,17 +6,17 @@ import com.ashin.exception.ChatException; import com.ashin.service.InteractService; import com.ashin.util.BotUtil; +import com.ashin.util.ImageUtil; +import net.mamoe.mirai.contact.Contact; import net.mamoe.mirai.contact.MessageTooLargeException; import net.mamoe.mirai.event.EventHandler; import net.mamoe.mirai.event.ListenerHost; import net.mamoe.mirai.event.events.*; -import net.mamoe.mirai.message.data.At; -import net.mamoe.mirai.message.data.MessageChain; -import net.mamoe.mirai.message.data.MessageChainBuilder; -import net.mamoe.mirai.message.data.QuoteReply; +import net.mamoe.mirai.message.data.*; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.io.File; /** * QQ消息处理程序 @@ -79,11 +79,17 @@ private void response(@NotNull MessageEvent event, ChatBO chatBO, String prompt) response = e.getMessage(); } try { - MessageChain messages = new MessageChainBuilder() - .append(new QuoteReply(event.getMessage())) - .append(response) - .build(); - event.getSubject().sendMessage(messages); + if (chatBO.isAiDraw()){ + File file = ImageUtil.download(response); + Contact.sendImage(event.getSubject(), file); + file.delete(); + }else { + MessageChain messages = new MessageChainBuilder() + .append(new QuoteReply(event.getMessage())) + .append(response) + .build(); + event.getSubject().sendMessage(messages); + } }catch (MessageTooLargeException e){ //信息太大,无法引用,采用直接回复 event.getSubject().sendMessage(response); From d36badb0c90ebac6061973e62c8abe3bc6e2313b Mon Sep 17 00:00:00 2001 From: ashinnotfound Date: Fri, 10 Nov 2023 11:04:52 +0800 Subject: [PATCH 11/16] =?UTF-8?q?improvement:=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 ++++++------ ...=> fix-protocol-version-1.12.0.mirai2.jar} | Bin 5082790 -> 5091254 bytes 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/resources/{fix-protocol-version-1.9.11.mirai2.jar => fix-protocol-version-1.12.0.mirai2.jar} (96%) diff --git a/pom.xml b/pom.xml index f0afdf6..d458b9f 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.ashin ChatGPT-YourChatRobot - beta-3.8.1 + 3.8 myGPT 快来把你的qq或微信变为chatgpt @@ -36,15 +36,15 @@ net.mamoe mirai-core-jvm - 2.15.0 + 2.16.0 - + mirai fix-protocol - 1.9.11 + 1.12.0 system - ${pom.basedir}/src/main/resources/fix-protocol-version-1.9.11.mirai2.jar + ${pom.basedir}/src/main/resources/fix-protocol-version-1.12.0.mirai2.jar org.asynchttpclient @@ -63,7 +63,7 @@ com.theokanning.openai-gpt3-java service - 0.15.0 + 0.16.1 com.knuddels diff --git a/src/main/resources/fix-protocol-version-1.9.11.mirai2.jar b/src/main/resources/fix-protocol-version-1.12.0.mirai2.jar similarity index 96% rename from src/main/resources/fix-protocol-version-1.9.11.mirai2.jar rename to src/main/resources/fix-protocol-version-1.12.0.mirai2.jar index d9d7a7602d8bf836bebeb474f831f6d31a21166e..23b031d2b8f8514f7c09a2cd01b11e0d5e10dbb0 100644 GIT binary patch delta 159790 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