Files
18xchat/assets/Scripts/chat18x/data/AiCharacterData.ts
T

110 lines
2.7 KiB
TypeScript
Raw Normal View History

2025-09-20 20:36:59 +08:00
/**
* Ai角色配置
*/
import { BaseData } from "./BaseData";
import proto from "db://assets/Scripts/proto/proto.pb.js";
2025-09-21 14:08:30 +08:00
// 数据结构
export interface AiCharacters {
id: number;
basePrompt: string;
additionPrompt: string;
}
2025-09-20 20:36:59 +08:00
2025-09-21 14:08:30 +08:00
export class AiCharacterData extends BaseData {
// 数据 map
private _dataMap: Map<number, AiCharacters>;
// 数据 id
private _ids: number[];
constructor() {
super();
this._dataMap = new Map<number, AiCharacters>(),
this._ids = [];
}
2025-09-20 20:36:59 +08:00
public reset(): void {
2025-09-21 14:08:30 +08:00
this._dataMap.clear();
this._ids = [];
2025-09-20 20:36:59 +08:00
}
public clear(): void {
2025-09-21 14:08:30 +08:00
this._dataMap.clear();
this._ids = [];
2025-09-20 20:36:59 +08:00
}
public destroy(): void {
super.destroy();
2025-09-21 14:08:30 +08:00
this._dataMap = null;
this._ids = null;
2025-09-20 20:36:59 +08:00
}
2025-09-21 14:08:30 +08:00
// 解析数据,一个
private parseOneAiCharacters(data: any): AiCharacters | null {
if (!data) return null;
const oneData: AiCharacters = {
id: data.id, // 角色id
basePrompt: data.basePrompt, // 个人信息基础prompt(聊天&amp;评分都需要)
additionPrompt: data.additionPrompt, // 额外信息prompt(聊天需要)
};
return oneData;
}
// 解析数据,多个
private parseAllAiCharacters(data: any): AiCharacters[] {
if (!data) return [];
let allData = [];
for (const value of data) {
const oneData: AiCharacters = this.parseOneAiCharacters(value);
if (oneData) {
allData.push(oneData);
}
}
return allData;
}
2025-09-20 20:36:59 +08:00
/** 设置Ai角色配置*/
public set aiCharacter(data: proto.cs.ICSGetResConfigRes) {
2025-09-21 17:37:32 +08:00
let parsed: any;
try {
parsed = JSON.parse(data.data);
} catch (e) {
console.warn("AiCharacterData JSON 解析失败", e);
return;
}
// 解析数据
let allData = this.parseAllAiCharacters(parsed);
// 保存数据
for (const oneData of allData) {
if (!oneData) continue;
// 覆盖或新增
if (!this._dataMap.has(oneData.id)) {
this._ids.push(oneData.id);
}
this._dataMap.set(oneData.id, oneData);
}
2025-09-20 20:36:59 +08:00
}
2025-09-21 14:08:30 +08:00
/** 获取所有 id */
public getAllIds(): number[] {
return this._ids;
2025-09-20 20:36:59 +08:00
}
2025-09-21 14:08:30 +08:00
/** 获取数据,根据 id */
private getAiCharactersById(id: number): AiCharacters | null {
return this._dataMap.get(id) ?? null;
}
/** 获取个人信息基础prompt,根据 id*/
public getBasePromptById(id: number): string {
const oneData = this.getAiCharactersById(id);
return oneData ? oneData.basePrompt : "";
}
/** 获取额外信息prompt,根据 id*/
public getAdditionPromptById(id: number): string {
const oneData = this.getAiCharactersById(id);
return oneData ? oneData.additionPrompt : "";
}
2025-09-20 20:36:59 +08:00
}