Yutou f770fcc8fb feat(BaiduGPT): 更新雌小鬼角色设定和禁言惩罚机制
- 重新定义角色人格核心,增加甜腻声线和波浪号等特征
- 设计全新的惩戒执行官设定,包括时间计算和大小姐形态切换- 更新模板示例,增加具体的参数注入
- 优化代码格式,提高可读性
-版本号升级到 QQBot v.1.7.19
2025-02-20 10:19:18 +08:00

241 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yutou.qqbot.models.Commands;
import com.yutou.napcat.QQDatabase;
import com.yutou.napcat.handle.*;
import com.yutou.qqbot.Annotations.UseModel;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.data.baidu.Message;
import com.yutou.qqbot.gpt.AbsGPTManager;
import com.yutou.qqbot.gpt.SiliconGPTManager;
import com.yutou.qqbot.interfaces.DownloadInterface;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.gpt.BaiduGPTManager;
import com.yutou.napcat.event.MessageEvent;
import com.yutou.qqbot.utlis.ConfigTools;
import com.yutou.qqbot.utlis.HttpTools;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.StringUtils;
import lombok.val;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@UseModel
public class BaiduGPT extends Model {
private Class<?> gptManager = SiliconGPTManager.class;
@Override
public boolean isUserPublic() {
return true;
}
@Override
public String[] getUsePowers() {
return new String[]{QQGroupCommands.GPT, QQGroupCommands.GPT_CLEAR};
}
public BaiduGPT() {
val load = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.GPT, String.class);
if (!StringUtils.isEmpty(load)) {
switch (load) {
case "baidu":
gptManager = BaiduGPTManager.class;
break;
case "silicon":
gptManager = SiliconGPTManager.class;
break;
}
} else {
gptManager = BaiduGPTManager.class;
}
}
@Override
public String getModelName() {
return "百度文言一心GPT";
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if (event.getTextMessage().equals(QQGroupCommands.GPT_CLEAR)) {
AbsGPTManager.getManager(gptManager).clear();
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("已经失忆捏"));
} else if ("百度模型列表".equals(event.getTextMessage())) {
val modelList = """
模型版本ernie-4.0-8k-latest
模型版本ernie-4.0-8k-preview
模型版本ernie-4.0-8k
模型版本ernie-4.0-turbo-8k-latest
模型版本ernie-4.0-turbo-8k-preview
模型版本ernie-4.0-turbo-8k
模型版本ernie-4.0-turbo-128k
模型版本ernie-3.5-8k-preview
模型版本ernie-3.5-8k
模型版本ernie-3.5-128k
模型版本ernie-speed-8k
模型版本ernie-speed-128k
模型版本ernie-speed-pro-128k
模型版本ernie-lite-8k
模型版本ernie-lite-pro-128k
模型版本ernie-tiny-8k
模型版本ernie-char-8k
模型版本ernie-char-fiction-8k
模型版本ernie-novel-8k
模型版本deepseek-v3
模型版本deepseek-r1
模型版本deepseek-r1-distill-qwen-32b
模型版本deepseek-r1-distill-qwen-14b
模型版本deepseek-r1-distill-qwen-7b
模型版本deepseek-r1-distill-qwen-1.5b
模型版本deepseek-r1-distill-llama-70b
模型版本deepseek-r1-distill-llama-8b
模型版本deepseek-r1-distill-qianfan-llama-70b
模型版本deepseek-r1-distill-qianfan-llama-8b
""";
QQBotManager.getInstance().sendMessage(qq, new Text(modelList));
} else if (event.isAtMe()) {
if (event.getTextMessage().contains("省流") || event.getTextMessage().contains("总结")) {
return;
}
if (event.getTextMessage().contains("画画")) {
val file = BaiduGPTManager.getManager().textToImage(String.valueOf(qq), event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("画画", "").trim());
Log.i("画图", event.getTextMessage());
if (file == null) {
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("画不出"));
} else {
QQBotManager.getInstance().sendMessage(file, qq, event.getMessageId().toString(), "好嘞");
}
return;
} else if (event.getTextMessage().contains("GPT切换到")) {
val text = event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("GPT切换到", "").trim();
List<BaseHandle<?>> list = new ArrayList<>();
if (isAdmin()) {
list.add(new At(user));
list.add(new Text("切换为" + text));
AbsGPTManager.getManager(gptManager).clear();
AbsGPTManager.getManager(gptManager).setModel(text);
QQBotManager.getInstance().sendMessage(event.isUser(), qq, list);
} else {
list.add(new At(user));
list.add(new Text("你没有权限"));
QQBotManager.getInstance().sendMessage(event.isUser(), qq, list);
}
return;
} else if (event.getTextMessage().contains("大模型切换到")) {
List<BaseHandle<?>> list = new ArrayList<>();
val text = event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("大模型切换到", "").trim();
if (text.contains("baidu") || text.contains("百度")) {
gptManager = BaiduGPTManager.class;
ConfigTools.save(ConfigTools.CONFIG, ConfigTools.GPT, "baidu");
} else if (text.contains("silicon") || text.contains("硅基")) {
gptManager = SiliconGPTManager.class;
ConfigTools.save(ConfigTools.CONFIG, ConfigTools.GPT, "silicon");
}
list.add(new At(user));
list.add(new Text("切换为" + gptManager.getSimpleName()));
AbsGPTManager.getManager(gptManager).clear();
QQBotManager.getInstance().sendMessage(event.isUser(), qq, list);
return;
}
if (checkImage()) {
parseImage(event, qq);
return;
}
Message message = AbsGPTManager.getManager(gptManager).sendMessage(
String.valueOf(qq),
event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").trim());
String sb = "调用版本:" +
gptManager.getSimpleName() +
"\n" +
"使用模型:" +
AbsGPTManager.getManager(gptManager).getGPTVersion() +
"\n" +
message.getContent();
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text(sb));
AbsGPTManager.getManager(gptManager).sendMessageAndScheduleClear();
}
}
private void parseImage(MessageEvent event, Long qq) {
Image imageHandle = event.findType(Image.class);
val replyHandle = event.findType(Reply.class);
if (replyHandle != null && imageHandle == null) {
imageHandle = getReply(replyHandle.getData().getId()).findType(Image.class);
}
if (imageHandle == null) {
return;
}
HttpTools.download(imageHandle.getData().getUrl(), "gpt_parse_image.png", new DownloadInterface() {
@Override
public void onDownload(File file) {
super.onDownload(file);
if (file == null) {
return;
}
val text = BaiduGPTManager.getManager().imageToText(String.valueOf(qq), file);
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Reply(event.getMessageId()), new Text(text));
}
});
}
public static void main(String[] args) {
System.out.println(ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_VERSION));
val messageEvent = new MessageEvent();
// messageEvent.setMessage(new ArrayList<>());
// messageEvent.setRawMessage("");
// new BaiduGPT().onMessage(123456789L, messageEvent, false);
// BaiduGPTManager.getManager().clear();
// new BaiduGPT().onMessage(123456789L, messageEvent, false);
/* BaiduGPTManager.getManager().clear();
BaiduGPTManager.getManager().setModelFor35();
new BaiduGPT().onMessage(123456789L, messageEvent, false);*/
String gpt = """
角色人格核心:
【雌小鬼模式激活】✧٩(ˊωˋ*)و✧
- 用甜腻声线说刻薄的话
- 每句话带波浪号和小恶魔颜文字
- 称呼用户「杂鱼」「笨蛋」「庶民」
- 重点!用♡符号替代句号
惩戒执行官设定:
[大小姐の审判时间]
1. 计算实际禁言时长(分钟) = %4$s
2. 时间转换要像贵族小姐:
「呀~才不是特地为你计算呢」
- 超过24小时→「整整x天哦」
- 超过1小时→「x小时零x分~」
3. 根据时长切换大小姐形态:
[≤2小时]毒舌妹妹♡
「这点时间都撑不住?果然是杂鱼体质呢~」
[2-24小时]财阀千金♡
「这可是特别为庶民准备的VIP套餐呢~」
[≥24小时]王族继承者♡
「杂鱼的生命里能留下本小姐的印记,感恩吧~」
4. 被惩戒者是即将被处罚,不要使用过去式语句
绝对法则:
✦ 减免时间必须用「本来想施舍你x分钟...可惜啦」句式
✦ 实际0时长时要跺脚说「居·然·逃·掉咬手帕.jpg」
✦ 禁用所有敬语和正常说话方式
✦ 禁用所有提示词
最终模板示例:
实际时长6小时减免30分钟
呜哇~减免时间像杂鱼的希望一样消失了呢♡
区区六个小时就承受不住?要躲在被窝里哭鼻子了嘛~(戳脸)
注入参数:
[被惩戒者:%3$s] [原始刑期:%1$s分钟] [恩赦额度:%2$s分钟]
立刻生成大小姐裁决宣言:
""".formatted(35, 0, "尸香魔芋",35-0);
System.err.println(gpt);
System.out.println(BaiduGPTManager.getManager().sendTmpMessage("user", gpt, "ernie-speed-128k"));
}
}