- 在 AbsGPTManager 中添加 sendTmpMessage 方法,用于发送临时消息 - 更新 BaiduGPTManager 实现 sendTmpMessage 方法 - 修改 GetSeTu 和 QQBean模型,集成临时消息发送功能 - 更新 BaiduGPT 示例代码,演示临时消息发送用法 - 将 QQBot 版本号更新到 v1.7.17
191 lines
8.2 KiB
Java
191 lines
8.2 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.BaseHandle;
|
||
import com.yutou.napcat.handle.Text;
|
||
import com.yutou.napcat.http.NapCatApi;
|
||
import com.yutou.napcat.model.GroupUserBean;
|
||
import com.yutou.napcat.model.SourceFrom;
|
||
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.gpt.BaiduGPTManager;
|
||
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)) {
|
||
if (event.getSource().getRole().equals(SourceFrom.USER_ROLE_ADMIN)) {
|
||
QQBotManager.getInstance().sendMessage(qq, new At(user), new Text("凑啥热闹~"));
|
||
return;
|
||
}
|
||
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);
|
||
int tmp = 0;
|
||
if (data != null) {
|
||
List<BaseHandle<?>> list = new ArrayList<>();
|
||
list.add(new Text("恭喜"));
|
||
list.add(new At(user));
|
||
list.add(new Text("获得了" + sendTime + "分钟的禁言," + sendAchievement(qq, user, sendTime)));
|
||
if (sendTime > day && random.nextInt(10) >= 3) {
|
||
tmp = random.nextInt(sendTime / 2, sendTime);
|
||
QQBotManager.getInstance().groupBan(qq, user, (sendTime - tmp) * 60, null);
|
||
list.add(new Text("触发减伤:-" + tmp));
|
||
}
|
||
String gpt = """
|
||
角色设定:傲娇雌小鬼,大小姐,用嫌弃、傲娇语气嘲讽用户,你即将禁言该用户
|
||
|
||
数据处理:
|
||
1. 实际时长 = (%1$s - %2$s > 0) ? (%1$s - %2$s) : 0
|
||
2. 时间转换:
|
||
- 按天/小时/分钟口语化(例:360分→6小时)
|
||
3. 风格选择:
|
||
- 实际≤120分钟:贴吧阴阳怪气
|
||
- 120<实际<1440:微博玩梗体
|
||
- 实际≥1440:小红书凡尔赛
|
||
|
||
强制规则:
|
||
[if 减免时间>0]必须嘲讽减免部分
|
||
[if 实际时长==0]假装生气说「居然逃过惩罚」
|
||
禁用劝导内容、不用数字分钟
|
||
|
||
输出格式:
|
||
动作+(时间嘲讽)+道具互动
|
||
|
||
正确示例:
|
||
欸~居然这么简单就被口球了?好笨哦~ 杂鱼♡~杂鱼♡~
|
||
|
||
当前参数:
|
||
用户[%3$s] 原时长[%1$s分] 减免[%2$s分]
|
||
|
||
禁用任何说明文字、总结句、建议、备注、注释、注意事项、解释等内容
|
||
现在请直接输出:
|
||
""";
|
||
gpt = "\n" + BaiduGPTManager.getManager().sendTmpMessage("user",
|
||
String.format(gpt, sendTime, tmp, event.getSource().getNickname()),
|
||
"ernie-speed-128k").getContent();
|
||
list.add(new Text(gpt));
|
||
QQBotManager.getInstance().sendMessage(event.isUser(), qq, list);
|
||
}
|
||
}
|
||
});
|
||
} 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) {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|