Files
QQBot/src/main/java/com/yutou/qqbot/QQBotManager.java
Yutou 864d5960a7 commit feat: 新增和改进HTTP请求处理及文件下载功能
- 新增文件下载功能:
  - 新增 `FileBody.java` 类,定义文件下载的数据结构。
  - 新增 `FileCallback.java` 类,处理文件下载的回调逻辑,包括线程池管理和下载进度报告。
  - 新增 `HttpDownloadUtils.java` 工具类,提供异步和同步的文件下载方法,并支持下载接口回调。

- 改进HTTP请求处理:
  - 修改 `NapCatQQ.java` 的 `onResponse` 方法,增加对响应头(`Headers`)的处理。
  - 修改 `GetRequestParams.java` 和 `PostRequestParams.java` 的 `getRequest` 方法,支持在请求中添加自定义Header。
  - 修改 `HttpCallback.java` 的 `onResponse` 方法,增加对响应头(`Headers`)的处理。

- 优化HTTP日志记录:
  - 修改 `HttpLoggingInterceptor.java`,调整日志级别为默认输出响应体,修复日志输出格式和异常处理问题。

- 改进BaseApi类:
  - 修改 `BaseApi.java`,增加对请求头的支持,并优化错误处理逻辑。
  - 在拦截器中处理非成功的响应码,返回统一格式的错误信息,避免业务逻辑中重复处理。

- 更新QQBotManager API回调:
  - 修改 `QQBotManager.java`,更新API回调方法以处理响应头(`Headers`),确保所有回调方法一致。

- 新增GPT API交互功能:
  - 新增 `OpenAiBean.java` 类,定义与OpenAI交互的数据结构,包含响应中的各个字段。
  - 新增 `SiliconGPTManager.java` 类,实现新的GPT管理器,处理与Silicon GPT API的交互。
  - 新增 `GPTApi.java` 类,提供与GPT API交互的基础配置和API调用方法。
  - 新增 `GPTBuilder.java` 类,用于构建发送给GPT API的请求对象。

- 改进GPT管理器:
  - 修改 `AbsGPTManager.java`,添加锁机制,防止同一用户同时发起多个请求。
  - 提供获取消息列表的方法,限制历史消息的最大数量。
  - 支持设置模型版本。
  - 修改 `BaiduGPTManager.java`,移除重复的清除方法,继承自父类。
  - 使用父类提供的方法获取消息列表,简化代码逻辑。

- 优化和重构:
  - 进一步优化 `HttpLoggingInterceptor.java` 的日志记录逻辑,提高性能和可读性。
  - 重构 `BaseApi.java` 初始化方法,简化代码逻辑,提高可读性。

这些改动增强了HTTP请求处理能力,增加了文件下载功能,并为与GPT API的交互提供了支持。
2025-02-08 18:27:00 +08:00

279 lines
9.2 KiB
Java

package com.yutou.qqbot;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.yutou.napcat.QQDatabase;
import com.yutou.napcat.handle.*;
import com.yutou.napcat.http.NapCatApi;
import com.yutou.napcat.model.FriendBean;
import com.yutou.napcat.model.GroupBean;
import com.yutou.napcat.model.GroupUserBean;
import com.yutou.napcat.model.SendMessageResponse;
import com.yutou.okhttp.BaseBean;
import com.yutou.okhttp.HttpBody;
import com.yutou.okhttp.HttpCallback;
import com.yutou.qqbot.data.MessageChainBuilder;
import com.yutou.qqbot.interfaces.ObjectInterface;
import com.yutou.qqbot.utlis.*;
import okhttp3.Headers;
import retrofit2.Response;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class QQBotManager {
public static Long defGroup = 891655174L;
public static Long defQQ = 583819556L;
private static QQBotManager botManager = null;
private static final long qqGroup = 891655174L;
private boolean isLogin = false;
private static boolean isInit = false;
private QQBotManager() {
Object isRun = ConfigTools.load(ConfigTools.CONFIG, "qq_bot");
if (isRun != null && (boolean) isRun) {
isLogin = true;
init();
}
}
private void init() {
sendMessage(true, 583819556L, "姬妻酱上线拉~☆Daze~ 当前版本:" + QQBotApplication.version);
NapCatApi.getGroupApi().getGroupList().enqueue(new HttpCallback<List<GroupBean>>() {
@Override
public void onResponse(Headers headers, int code, String status, List<GroupBean> response, String rawResponse) {
for (GroupBean groupBean : response) {
QQDatabase.addGroup(groupBean.getGroupId(), groupBean);
QQNumberManager.getManager().addNumber(groupBean.getGroupId(), true);
}
}
@Override
public void onFailure(Throwable throwable) {
}
});
NapCatApi.getFriendApi().getFriendList().enqueue(new HttpCallback<List<FriendBean>>() {
@Override
public void onResponse(Headers headers, int code, String status, List<FriendBean> response, String rawResponse) {
for (FriendBean friendBean : response) {
QQDatabase.addUser(friendBean.getUserId(), friendBean);
QQNumberManager.getManager().addNumber(friendBean.getUserId(), false);
}
}
@Override
public void onFailure(Throwable throwable) {
}
});
NapCatApi.getUtilsApi().getLoginInfo().enqueue(new HttpCallback<FriendBean>() {
@Override
public void onResponse(Headers headers,int code, String status, FriendBean response, String rawResponse) {
QQDatabase.setMe(response);
}
@Override
public void onFailure(Throwable throwable) {
}
});
isInit = true;
}
public synchronized static QQBotManager getInstance() {
if (botManager == null && !isInit) {
botManager = new QQBotManager();
}
return botManager;
}
private String getNotLoginQQ() {
return "没有登录QQ";
}
public SendMessageResponse sendPrivateMessage(Long qq, BaseHandle<?>... items) {
return sendMessage(true, qq, items);
}
private SendMessageResponse sendGroupMessage(Long group, BaseHandle<?>... items) {
return sendMessage(false, group, items);
}
public SendMessageResponse sendMessage(boolean user, Long qq, String msg) {
return sendMessage(user, qq, new Text(msg));
}
public SendMessageResponse sendMessage(Long qq, BaseHandle<?>... items) {
return sendMessage(QQDatabase.checkFriend(qq), qq, Arrays.asList(items));
}
public SendMessageResponse sendMessage(boolean isUser, Long qq, BaseHandle<?>... items) {
return sendMessage(isUser, qq, Arrays.asList(items));
}
public SendMessageResponse sendMessage(boolean isUser, Long qq, List<BaseHandle<?>> items) {
try {
if (!ConfigTools.load(ConfigTools.CONFIG, ConfigTools.QQ, Boolean.class)) {
return null;
}
MessageHandleBuild handleBuild = MessageHandleBuild
.create()
.setGroup(!isUser)
.setQQNumber(qq);
for (BaseHandle<?> item : items) {
if (item.getData() == null) {
continue;
}
if (item instanceof Reply) {
if (((Reply) item).getData().getId() == -1) {
continue;
}
}
handleBuild.add(item);
}
Response<HttpBody<SendMessageResponse>> response;
if (isUser) {
response = NapCatApi.getMessageApi().sendPrivateMsg(
handleBuild.build()
).execute();
} else {
response = NapCatApi.getMessageApi().sendGroupMsg(
handleBuild.build()
).execute();
}
if (response.body() != null) {
return response.body().getData();
}
} catch (Exception e) {
e.printStackTrace();
SendMessageResponse response = new SendMessageResponse();
response.setId(-1);
response.setE(e.getMessage());
return response;
}
return null;
}
public String sendMessage(String text) {
return sendMessage(false,defGroup,text).toString();
}
public SendMessageResponse sendMessage(Long group, String text) {
return sendMessage(QQDatabase.checkFriend(group), group, new Text(text));
}
public void sendMessage(Long group, MessageChainBuilder builder) {
if (QQNumberManager.getManager().isGroup(group)) {
System.out.println("发群");
} else {
System.out.println("发个人");
}
}
public void sendMessage(File imageFile, Long qq, String text) {
sendMessage(imageFile, qq, null, text);
}
public void sendMessage(File imageFile, Long qq, String replyMessageId, String text) {
List<BaseHandle<?>> items = new ArrayList<>();
if (imageFile != null) {
items.add(new Image(imageFile));
}
if (replyMessageId != null && !replyMessageId.isEmpty()) {
items.add(new Reply(Long.parseLong(replyMessageId)));
}
if (text != null && !text.isEmpty()) {
items.add(new Text(text));
}
if (!items.isEmpty()) {
sendMessage(QQDatabase.checkFriend(qq),qq, items);
}
}
public void sendMessage(File imageFile, String text) {
sendMessage(true,defQQ,new Image(imageFile),new Text(text));
}
public void sendMessage(List<File> imgs, Long qq, String text) {
}
public void groupBan(long qqGroup, long user, int timer, ObjectInterface objectInterface) {
NapCatApi.getGroupApi().groupBan(qqGroup, user, timer).enqueue(new HttpCallback<BaseBean>() {
@Override
public void onResponse(Headers headers,int code, String status, BaseBean response, String rawResponse) {
if (objectInterface != null) {
objectInterface.out("1");
}
}
@Override
public void onFailure(Throwable throwable) {
if (objectInterface != null) {
objectInterface.out(null);
}
}
});
}
public void getShutUpList(long qqGroup, HttpCallback<List<GroupUserBean>> callback) {
NapCatApi.getGroupApi().getGroupUserList(qqGroup,true).enqueue(callback);
}
public void setGroupSpecialTitle(long group,
long user,
String title,
long duration) {
NapCatApi.getGroupApi().setGroupSpecialTitle(group, user, title, duration).enqueue(new HttpCallback<BaseBean>() {
@Override
public void onResponse(Headers headers,int code, String status, BaseBean response, String rawResponse) {
}
@Override
public void onFailure(Throwable throwable) {
}
});
}
public static void main(String[] args) {
JSONObject json = new JSONObject();
json.put("t1", 3234567890L);
System.out.println("json = " + json);
String tmp = json.toString();
JSONObject json2 = JSON.parseObject(tmp);
System.out.println("json2 = " + json2);
}
public void sendVersion() {
String localVersion = QQBotApplication.version;
String serverVersion = HttpTools.get("https://tools.yutou233.cn/public/version.do?token=zIrsh9TUZP2lfRW753PannG49E7VJvor");
String msg = "本地版本:" + localVersion + "\n" + "服务器版本:" + serverVersion;
QQBotManager.getInstance().sendMessage(msg);
// AppTools.sendServer("服务版本查询", msg);
}
public boolean isLogin() {
return true;
}
}