- 新增文件下载功能: - 新增 `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的交互提供了支持。
150 lines
5.7 KiB
Java
150 lines
5.7 KiB
Java
package com.yutou.qqbot.models.Commands;
|
|
|
|
import com.yutou.napcat.event.MessageEvent;
|
|
import com.yutou.napcat.handle.At;
|
|
import com.yutou.napcat.handle.Text;
|
|
import com.yutou.napcat.http.NapCatApi;
|
|
import com.yutou.napcat.model.GroupUserBean;
|
|
import com.yutou.okhttp.BaseBean;
|
|
import com.yutou.okhttp.HttpCallback;
|
|
import com.yutou.qqbot.Annotations.UseModel;
|
|
import com.yutou.qqbot.QQBotManager;
|
|
import com.yutou.qqbot.interfaces.ObjectInterface;
|
|
import com.yutou.qqbot.models.Model;
|
|
import com.yutou.qqbot.utlis.RedisTools;
|
|
import okhttp3.Headers;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
|
|
@UseModel
|
|
public class QQBean extends Model {
|
|
@Override
|
|
public boolean isUserPublic() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public String[] getUsePowers() {
|
|
return new String[0];
|
|
}
|
|
|
|
@Override
|
|
public String getModelName() {
|
|
return "QQ禁言";
|
|
}
|
|
|
|
Random random = new Random();
|
|
|
|
@Override
|
|
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
|
|
super.onMessage(qq, event, isGroup);
|
|
if (!isGroup) return;
|
|
if ("抽奖".equals(msg)) {
|
|
int hour = 60;
|
|
int day = 1440;
|
|
int max = 30 * day;
|
|
int time = 1;
|
|
if (random.nextInt(100) == 23) {
|
|
releaseAll(qq, true);
|
|
} else if (random.nextInt(10) > 2) {
|
|
time = random.nextInt(hour);
|
|
} else if (random.nextInt(10) > 4) {
|
|
time = random.nextInt(day);
|
|
} else if (random.nextInt(10) > 5) {
|
|
time = random.nextInt(day, 3 * day);
|
|
} else {
|
|
time = random.nextInt(max);
|
|
|
|
}
|
|
int sendTime = time;
|
|
QQBotManager.getInstance().groupBan(qq, user, sendTime * 60, new ObjectInterface() {
|
|
@Override
|
|
public void out(String data) {
|
|
super.out(data);
|
|
if (data != null) {
|
|
QQBotManager.getInstance().sendMessage(event.isUser(), qq,
|
|
new Text("恭喜"),
|
|
new At(user),
|
|
new Text("获得了" + sendTime + "分钟的禁言," + sendAchievement(qq, user, sendTime))
|
|
);
|
|
if (sendTime > day && random.nextInt(10) >= 3) {
|
|
int tmp = random.nextInt(sendTime / 2, sendTime);
|
|
QQBotManager.getInstance().groupBan(qq, user, (sendTime - tmp) * 60, null);
|
|
QQBotManager.getInstance().sendMessage(qq, "触发减伤:-" + tmp);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
} else if ("大赦天下".equals(msg) && isAdmin()) {
|
|
releaseAll(qq, true);
|
|
} else if ("查看禁言列表".equals(msg) && isAdmin()) {
|
|
releaseAll(qq, false);
|
|
}
|
|
|
|
}
|
|
|
|
String sendAchievement(long qq, long user, int timer) {
|
|
Calendar data1 = Calendar.getInstance();
|
|
Calendar data2 = Calendar.getInstance();
|
|
data1.setTime(new Date());
|
|
data2.set(Calendar.HOUR_OF_DAY, 23);
|
|
data2.set(Calendar.MINUTE, 59);
|
|
data2.set(Calendar.SECOND, 59);
|
|
long time = data2.getTimeInMillis() - data1.getTimeInMillis();
|
|
String achievement = RedisTools.get("shut_" + qq + "_" + user);
|
|
int achievementTimer = timer;
|
|
if (achievement != null) {
|
|
achievementTimer += Integer.parseInt(achievement);
|
|
}
|
|
RedisTools.set("shut_" + qq + "_" + user, achievementTimer + "", time / 1000);
|
|
return "今日累计" + achievementTimer + "分钟禁言";
|
|
}
|
|
|
|
void releaseAll(long qq, boolean isRelease) {
|
|
QQBotManager.getInstance().getShutUpList(qq, new HttpCallback<List<GroupUserBean>>() {
|
|
@Override
|
|
public void onResponse(Headers headers, int code, String status, List<GroupUserBean> response, String rawResponse) {
|
|
List<GroupUserBean> shutList = new ArrayList<>();
|
|
for (GroupUserBean bean : response) {
|
|
if (bean.getShutUpTimestamp() > 60) {
|
|
shutList.add(bean);
|
|
}
|
|
}
|
|
if (!shutList.isEmpty()) {
|
|
|
|
if (!isRelease) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for (GroupUserBean bean : shutList) {
|
|
sb.append(bean.getNickname()).append(":").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA).format(new Date(bean.getShutUpTimestamp()))).append("\n");
|
|
}
|
|
QQBotManager.getInstance().sendMessage(qq, "当前塞了:" + shutList.size() + "人" + "\n" + sb);
|
|
return;
|
|
}
|
|
QQBotManager.getInstance().sendMessage(qq, "触发自动解禁,解禁人数:" + shutList.size() + "人");
|
|
for (GroupUserBean bean : shutList) {
|
|
NapCatApi.getGroupApi().groupBan(qq, bean.getUserId(), 0).enqueue(new HttpCallback<BaseBean>() {
|
|
@Override
|
|
public void onResponse(Headers headers, int code, String status, BaseBean response, String rawResponse) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(Throwable throwable) {
|
|
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
QQBotManager.getInstance().sendMessage(qq, "阿巴阿巴");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(Throwable throwable) {
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|