UNPKG

karin-plugin-timechange

Version:

Karin智能头像切换插件 - 根据时间自动在白天和晚上切换不同的头像

179 lines (177 loc) 5.53 kB
// 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 };