82 lines
3.2 KiB
JavaScript
82 lines
3.2 KiB
JavaScript
// @ts-ignore 获取角色列表接口
|
||
/**
|
||
* 获取角色列表接口
|
||
* 通过PSK验证后,从数据库characters表获取角色数据
|
||
* 支持通过uid参数过滤特定账号的角色数据
|
||
*/
|
||
export async function execute(http_message) {
|
||
// 验证请求头中的PSK
|
||
let psk_valid = HttpReQUtils.check_psk(http_message);
|
||
|
||
if (!psk_valid) {
|
||
// 直接返回错误响应
|
||
return { code: 401, success: false, message: "未授权", data: null };
|
||
}
|
||
|
||
try {
|
||
// 获取请求参数(支持从根对象或body字段获取uid参数)
|
||
let uid = http_message["uid"] || (http_message["body"] ? http_message["body"]["uid"] : null);
|
||
|
||
// 构建SQL查询语句
|
||
let sql = "SELECT * FROM characters";
|
||
|
||
if (uid) {
|
||
sql += ` WHERE uid = ${uid}`;
|
||
}
|
||
|
||
// 获取角色数据
|
||
// @ts-ignore
|
||
let characters = await _database_.execute_sql_by_name("accounts", sql);
|
||
|
||
// 格式化数据
|
||
let charactersList = [];
|
||
if (characters && characters !== "[]") {
|
||
try {
|
||
// 解析查询结果JSON数组
|
||
let charsList = JSON.parse(characters);
|
||
|
||
for (let char of charsList) {
|
||
// 解析角色数据
|
||
let charData = char;
|
||
|
||
// 解析json_data字段(如果有)
|
||
let extraData = {};
|
||
if (charData.json_data && charData.json_data !== "") {
|
||
try {
|
||
extraData = JSON.parse(charData.json_data);
|
||
} catch (e) {
|
||
console.error("解析角色json_data失败:", e);
|
||
}
|
||
}
|
||
|
||
// 添加到角色列表
|
||
charactersList.push({
|
||
id: charData.id,
|
||
uid: charData.uid,
|
||
name: charData.name,
|
||
level: charData.level,
|
||
job: charData.job,
|
||
sex: charData.sex,
|
||
created_at: extraData.created_at || "未知",
|
||
last_login: extraData.last_login || "未知",
|
||
status: extraData.status !== undefined ? (extraData.status ? 1 : 0) : 1, // 1为正常,0为禁用
|
||
extra_data: extraData
|
||
});
|
||
}
|
||
} catch (e) {
|
||
console.error("解析角色列表失败:", e);
|
||
return { code: 500, success: false, message: "解析角色数据失败", data: null };
|
||
}
|
||
}
|
||
|
||
// 返回成功响应
|
||
return { code: 200, success: true, message: "ok", data: {
|
||
characters_list: charactersList,
|
||
total: charactersList.length
|
||
} };
|
||
} catch (error) {
|
||
console.error("获取角色列表失败:", error);
|
||
// 返回错误响应
|
||
return { code: 500, success: false, message: "获取角色列表失败: " + (error.message || "未知错误"), data: null };
|
||
}
|
||
} |