# trss-akasha-terminal-plugin
**Repository Path**: dmqaq/trss-akasha-terminal-plugin
## Basic Information
- **Project Name**: trss-akasha-terminal-plugin
- **Description**: 虚空插件trss&miao双版本
- **Primary Language**: JavaScript
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2025-06-19
- **Last Updated**: 2025-12-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, Trss-Yunzai
## README

# TRSS Akasha Terminal Plugin

一个功能丰富的Yunzai-Bot插件,提供完整的游戏系统、sqlite数据库&JSON双存储支持和Web管理界面。(本来是trss版本单独开发版,想了想兼容下喵崽)
## 凑哈基煤处决通告
- 说明:本通告针对“凑哈基煤”
- 罪名:
1. 经典“云开发”:在群里远程指导代码自我实现,本人不落地。
2. 评审会变“复读机大会”:全程“这不就很合理吗”循环播放。
3. 版本号“玄学打榜”:喊“赢麻了就发版”,严重扰乱节奏。
4. 懒得更新代码:以“代码会自己进化”为由,连续三版本不合并分支。
5. 生产“开摆式手动灰度”:当天上线当天摆,负载玄学波动。
6. 架构图进化为“电音ASCII”,自称燃起来,监控直接报警。
7. 把 TODO 当成民俗文化遗产,倡导“不可动摇的注释留白”。
8. 懒得更新代码:把临时补丁永久挂在“临时”目录,且拒绝重构。
9. 面对报错只说“寄”,并建议“等会儿就逆天改命”,延误修复。
10. 热修复“众筹热心”:喊话“兄弟们上啊”,流程彻底社交化。
11. 文档“小作文体”:结尾“懂的都懂”,实际不可执行。
12. 懒得更新代码:用“下一轮优化”拖延修复,将问题封存至下个纪元。
13. 回滚包装为“历史体验服”:大家贴贴旧版本,沉浸式穿越。
14. 频喊“赢麻了”提士气,CPU这边“寄麻了”,引发争议。
15. 制定“随缘打补丁”:谁看见谁修是缘分,引发追星式维护。
- 判决:即刻处决“凑哈基煤”史刑,并且永久踢出该仓库,本判决自发布之日起生效
- 温馨提示:纯属喜剧化说明,目的在于恶搞凑哈基煤,与代码无关
## 🌟 主要功能
### 游戏系统
- **战斗系统**: 经验获取、等级提升、特权系统
- **情侣系统**: 表白、结婚、情侣任务、约会、决斗
- **商店系统**: 物品购买、背包管理
- **任务系统**: 每日任务、冒险任务
- **合成系统**: 物品合成、分解、工坊升级
- **家园系统**: 房屋建设、装饰
### 数据存储
- **JSON存储**: 传统文件存储方式
- **MySQL存储**: 高性能数据库存储
- **数据同步**: JSON与MySQL双向同步
## 存储 重构与迁移
为提升并发下的数据一致性与性能,插件新增基于 `SQLite` 的本地持久化方案,并对读写路径与校验进行了统一设计。SQLite 现作为默认存储层(仍保留 JSON 用于静态模板与缓存;MySQL 功能可选)。
### 新特性
- 统一数据层:`components/data_manager_sqlite.js` 提供用户、签到、背包、工坊、合成记录、关系、增益、任务等读写接口
- 原子写与并发锁:所有写入通过队列化写锁,避免并发覆盖与部分写入
- JSON Schema 校验:`data/schemas/*.json` + `Ajv` 在入库前进行数据结构校验
- 路径/键集中管理:`components/common-lib/paths.js` 与 `components/common-lib/keys.js` 统一数据路径与缓存键
- 双层缓存策略:`components/cache.js` 提供本地内存 + Redis 缓存,热门数据支持 TTL 与失效
- 同步 I/O 替换:`components/text.js` 等逻辑全部替换为异步 I/O 并接入 SQLite,移除阻塞读写
- SQLite 表结构:初始化时自动创建 表
### 迁移步骤
- 安装依赖:在插件目录执行 `pnpm i`
- 也可执行 `npm run install-sqlite`
- 还有别忘了 `pnpm approve-builds`
- 首次初始化:插件启动后自动在 `data` 目录创建数据库文件并建表(无需手动操作)
- 数据切换:代码已默认优先读写 SQLite;JSON 文件仅用于静态模板(如商店与关系文案)与缓存回退
- MySQL 共存:如需继续使用 MySQL,同步与管理界面仍可用,但游戏数据默认走 SQLite
### 并发与一致性策略
- 写锁队列:所有写操作串行化,保证无交叉写入
- 原子写入:文件写采用临时文件 + 覆盖策略(由 `FileLockIntegration` 统一封装)
- 校验失败拦截:写入前通过 Ajv 校验;失败直接抛错并拒绝提交
- 缓存 TTL:热门数据(如商店)在 Redis/内存缓存中设置 TTL,读写后自动刷新或失效
### 目录与关键文件
- `components/sqlite_manager.js`:SQLite 初始化与建表
- `components/data_manager_sqlite.js`:数据访问层(含写锁与 Ajv 校验)
- `components/common-lib/paths.js`:统一数据文件路径
- `components/common-lib/keys.js`:统一缓存键规则
- `components/text.js`:业务文案与游戏数据读取已接入 SQLite 与异步 I/O
- `data/schemas/*.json`:各类数据的 JSON Schema 定义
### 常见问题
- 依赖安装失败:请确保本机 Node.js 版本支持 `better-sqlite3`,Windows 环境建议使用较新的 Node 版本(还有试试pnpm approve-builds的操作)
- 旧 JSON 数据如何使用:系统会尽量读取旧 JSON 文件进行回退,但推荐运行一段时间自动沉淀到 SQLite;
- Redis 非必需:若未配置 Redis,缓存将仅使用内存层;不影响功能
## 🚀 快速开始
### 安装插件
使用 git 进行安装
① (国外更新较慢) 使用 Github
```bash
git clone --depth=1 https://github.com/wbndm1234/trss-akasha-terminal-plugin.git ./plugins/trss-akasha-terminal-plugin/
```
② (国内推荐最快) 使用 Gitee
```bash
git clone --depth=1 https://gitee.com/dmqaq/trss-akasha-terminal-plugin.git ./plugins/trss-akasha-terminal-plugin/
```
③ (国内备用最慢) 使用 Gitcode
```bash
git clone --depth=1 https://gitcode.com/dmqaq/trss-akasha-terminal-plugin.git ./plugins/trss-akasha-terminal-plugin/
```
或者直接下载并解压到 plugins 目录
### 初始化依赖
```bash
cd ./plugins/trss-akasha-terminal-plugin/
pnpm i
pnpm approve-builds
```
### 启动服务
```bash
# 启动Web管理界面
#启动webui
```
```bash
# 启动MySQL数据库连接
#启动mysql
```
```bash
# 查看服务状态
#webui状态
#mysql状态
```
## 📋 命令列表
### 管理命令
| 命令 | 说明 |
|------|------|
| `#启动webui` | 启动Web管理界面 |
| `#停止webui` | 停止Web管理界面 |
| `#webui状态` | 查看WebUI运行状态 |
| `#启动mysql` | 连接MySQL数据库 |
| `#停止mysql` | 断开MySQL连接 |
| `#mysql状态` | 查看MySQL连接状态 |
| `#同步json到mysql` | 将JSON数据同步到MySQL |
| `#同步mysql到json` | 将MySQL数据同步到JSON |
### 游戏命令
| 命令 | 说明 |
|------|------|
| `#战斗` | 进行战斗获取经验 |
| `#我的信息` | 查看个人信息 |
| `#表白 @用户` | 向其他用户表白 |
| `#结婚 @用户` | 与其他用户结婚 |
| `#离婚` | 解除婚姻关系 |
| `#商店` | 查看商店物品 |
| `#购买 物品名` | 购买物品 |
| `#背包` | 查看背包物品 |
| `#任务` | 查看可用任务 |
| `#冒险` | 进行冒险任务 |
| `#合成 物品名` | 合成物品 |
| `#分解 物品名` | 分解物品 |
## 🗄️ MySQL说明(可选)
SQLite 为默认存储层,MySQL 支持保留用于数据同步与扩展需求;如需启用,请参考管理界面自行配置。
## 🌐 Web管理界面
访问地址: http://localhost:3000
说明:WebUI详细模块列表已省略,保留基本启动与命令说明。
## 🔧 配置说明
### 主配置 (config/cfg.js)
```javascript
export const cfg = {
// WebUI配置
webui: {
enabled: true,
port: 3000,
host: 'localhost'
},
// MySQL配置
mysql: {
enabled: false,
autoConnect: false
},
// 游戏配置
game: {
maxLevel: 100,
expMultiplier: 1.0,
cooldownEnabled: true
}
}
```
## 🚨 注意事项
1. **安全性**
- WebUI默认只监听localhost,生产环境请配置防火墙
- MySQL密码请使用强密码
- 定期备份数据库数据
2. **性能优化**
- 大量用户时建议使用MySQL存储
- 定期清理过期的统计数据
3. **数据备份**
- 定期备份JSON文件和MySQL数据
- 重要操作前建议先备份
## 📞 支持与反馈
如果遇到问题或有功能建议,请:
1. 检查日志文件获取详细错误信息
2. 确认MySQL连接配置正确
3. 验证依赖包是否正确安装
4. 查看WebUI控制台错误信息
### 游戏说明
详细玩法说明滚去用命令 `#trss虚空帮助` 查看,本文档 不再说明。
## ❤️ 贡献
- 这个是原[虚空插件](https://gitee.com/go-farther-and-farther/akasha-terminal-plugin) 仓库,我与原插件作者二创以适配trss崽(喵崽的ICQQ还是太牢了),[越追越远](https://gitee.com/go-farther-and-farther)+[上一刻](https://gitee.com/tyg211375)+[nahida](https://gitee.com/nahida22)+[我](https://gitee.com/dmqaq)来改的代码
- [爱发电の赞助](https://afdian.com/a/wbndm)
**提交 Bug 或建议**:
- 通过 [GitHub Issues](https://github.com/wbndm1234/trss-akasha-terminal-plugin/issues) 提交问题啦
- 通过 [GitHub pull requests](https://github.com/wbndm1234/trss-akasha-terminal-plugin/pulls) 提交PR啦
- 可以来[QQ群](https://qm.qq.com/q/EqqXeZ06MU)玩玩来提点建议捏
