karin-plugin-timechange
Version:
Karin智能头像切换插件 - 根据时间自动在白天和晚上切换不同的头像
179 lines (177 loc) • 5.53 kB
JavaScript
// src/utils/avatar-config.ts
import fs from "fs";
import path from "path";
import { logger } from "node-karin";
import { karinPathPlugins } from "node-karin/root";
var AvatarConfig = class {
configPath;
config;
defaultConfig = {
autoSwitch: false,
dayStartHour: 6,
nightStartHour: 18,
dayAvatarPath: "",
nightAvatarPath: "",
lastSwitchType: null,
lastSwitchTime: 0
};
constructor() {
const pluginName = "karin-plugin-timechange";
const pluginPath = path.join(karinPathPlugins, pluginName);
const configDir = path.join(pluginPath, "config");
if (!fs.existsSync(configDir)) {
fs.mkdirSync(configDir, { recursive: true });
}
this.configPath = path.join(configDir, "avatar-config.json");
this.config = this.loadConfig();
}
/**
* 加载配置文件
*/
loadConfig() {
try {
if (fs.existsSync(this.configPath)) {
const configData = fs.readFileSync(this.configPath, "utf-8");
const parsedConfig = JSON.parse(configData);
return { ...this.defaultConfig, ...parsedConfig };
} else {
this.saveConfig(this.defaultConfig);
return { ...this.defaultConfig };
}
} catch (error) {
logger.error(`[\u5934\u50CF\u914D\u7F6E] \u52A0\u8F7D\u914D\u7F6E\u6587\u4EF6\u5931\u8D25: ${error}`);
return { ...this.defaultConfig };
}
}
/**
* 保存配置文件
*/
saveConfig(config) {
try {
const configData = JSON.stringify(config, null, 2);
fs.writeFileSync(this.configPath, configData, "utf-8");
this.config = config;
logger.debug("[\u5934\u50CF\u914D\u7F6E] \u914D\u7F6E\u6587\u4EF6\u5DF2\u4FDD\u5B58");
} catch (error) {
logger.error(`[\u5934\u50CF\u914D\u7F6E] \u4FDD\u5B58\u914D\u7F6E\u6587\u4EF6\u5931\u8D25: ${error}`);
}
}
/**
* 获取当前配置
*/
getConfig() {
return { ...this.config };
}
/**
* 设置自动切换开关
*/
setAutoSwitch(enabled) {
this.config.autoSwitch = enabled;
this.saveConfig(this.config);
logger.info(`[\u5934\u50CF\u914D\u7F6E] \u81EA\u52A8\u5207\u6362\u5DF2${enabled ? "\u5F00\u542F" : "\u5173\u95ED"}`);
}
/**
* 设置时间段
*/
setTimeRange(dayStartHour, nightStartHour) {
this.config.dayStartHour = dayStartHour;
this.config.nightStartHour = nightStartHour;
this.saveConfig(this.config);
logger.info(`[\u5934\u50CF\u914D\u7F6E] \u65F6\u95F4\u6BB5\u5DF2\u8BBE\u7F6E: \u767D\u5929${dayStartHour}:00-${nightStartHour}:00, \u665A\u4E0A${nightStartHour}:00-${dayStartHour}:00`);
}
/**
* 设置白天头像路径
*/
setDayAvatarPath(avatarPath) {
this.config.dayAvatarPath = avatarPath;
this.saveConfig(this.config);
logger.info(`[\u5934\u50CF\u914D\u7F6E] \u767D\u5929\u5934\u50CF\u8DEF\u5F84\u5DF2\u8BBE\u7F6E: ${avatarPath}`);
}
/**
* 设置晚上头像路径
*/
setNightAvatarPath(avatarPath) {
this.config.nightAvatarPath = avatarPath;
this.saveConfig(this.config);
logger.info(`[\u5934\u50CF\u914D\u7F6E] \u665A\u4E0A\u5934\u50CF\u8DEF\u5F84\u5DF2\u8BBE\u7F6E: ${avatarPath}`);
}
/**
* 更新最后切换信息
*/
updateLastSwitch(type) {
this.config.lastSwitchType = type;
this.config.lastSwitchTime = Date.now();
this.saveConfig(this.config);
}
/**
* 检查是否需要切换头像
* @param currentType 当前应该的头像类型
* @returns 是否需要切换
*/
shouldSwitch(currentType) {
if (!this.config.lastSwitchType) {
return true;
}
if (this.config.lastSwitchType !== currentType) {
return true;
}
const twelveHours = 12 * 60 * 60 * 1e3;
if (Date.now() - this.config.lastSwitchTime > twelveHours) {
return true;
}
return false;
}
/**
* 获取资源目录路径
*/
getResourcePath() {
const pluginName = "karin-plugin-timechange";
const pluginPath = path.join(karinPathPlugins, pluginName);
return path.join(pluginPath, "resources");
}
/**
* 获取默认头像路径
*/
getDefaultAvatarPaths() {
const resourcePath = this.getResourcePath();
return {
day: path.join(resourcePath, "day-avatar.jpg"),
night: path.join(resourcePath, "night-avatar.jpg")
};
}
/**
* 重置配置为默认值
*/
resetConfig() {
this.saveConfig(this.defaultConfig);
logger.info("[\u5934\u50CF\u914D\u7F6E] \u914D\u7F6E\u5DF2\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u503C");
}
/**
* 验证配置的有效性
*/
validateConfig() {
const errors = [];
if (this.config.dayStartHour < 0 || this.config.dayStartHour > 23) {
errors.push("\u767D\u5929\u5F00\u59CB\u65F6\u95F4\u65E0\u6548\uFF08\u5E94\u4E3A0-23\uFF09");
}
if (this.config.nightStartHour < 0 || this.config.nightStartHour > 23) {
errors.push("\u665A\u4E0A\u5F00\u59CB\u65F6\u95F4\u65E0\u6548\uFF08\u5E94\u4E3A0-23\uFF09");
}
if (this.config.dayStartHour === this.config.nightStartHour) {
errors.push("\u767D\u5929\u548C\u665A\u4E0A\u5F00\u59CB\u65F6\u95F4\u4E0D\u80FD\u76F8\u540C");
}
if (this.config.dayAvatarPath && !fs.existsSync(this.config.dayAvatarPath)) {
errors.push("\u767D\u5929\u5934\u50CF\u6587\u4EF6\u4E0D\u5B58\u5728");
}
if (this.config.nightAvatarPath && !fs.existsSync(this.config.nightAvatarPath)) {
errors.push("\u665A\u4E0A\u5934\u50CF\u6587\u4EF6\u4E0D\u5B58\u5728");
}
return {
valid: errors.length === 0,
errors
};
}
};
export {
AvatarConfig
};