Skip to content

Commit

Permalink
初步增加查看市场功能&&修复部分bug
Browse files Browse the repository at this point in the history
  • Loading branch information
NIANIANKNIA committed Jun 23, 2023
1 parent c50acb9 commit 6d22628
Show file tree
Hide file tree
Showing 12 changed files with 357 additions and 119 deletions.
28 changes: 16 additions & 12 deletions CHANGELOG-PRE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# v1.3.0-pre-1 更新日志
# v1.3.0-pre-2 更新日志

[![BDS VERSION](https://img.shields.io/badge/BDS-1.20.10.02-green?style=for-the-badge&logo=appveyor)](https://www.minecraft.net/en-us/download/server/bedrock)
[![LiteLoader VERSION](https://img.shields.io/badge/LiteLoader-2.14.1-green?style=for-the-badge&logo=appveyor)](https://github.com/LiteLDev/LiteLoaderBDS/releases/)
Expand All @@ -7,31 +7,35 @@

> 预发布版本提醒:这是一个预览版本,可能存在一些bug,仅供测试,请勿在正式生产环境使用本版本!
## 适配

BDS && Minecraft BedRock-1.20.10.02

Liteloader 2.14.1


## 新增

1.玩家交易市场(制作中,由于部分api需求,预计将与**BDS1.20.10.02**一同发布)
玩家交易市场(制作中,由于部分api需求,预计将与**BDS1.20.10.02**一同发布)

已完成模块:

- 玩家上线市场逻辑(服务器本地)
- 玩家上架物品qq机器人群聊提醒
- 玩家上线物品依赖服务器存储数据

2.qq机器人新增自动检查是否存在配置文件,并按需生成。
## 优化

qq机器人升级至oicp0.4.1
1.qq机器人升级至icqq@0.4.6

2.优化玩家交易市场整体交易逻辑

3.玩家上架商品增加记录项目-上架时间

## 修复

部分情况下qq群机器人登录失败的情况(再出现该情况请尝试将机器人config.json文件中的platform选项数字改为6)
1.当玩家上架物品数量不为最大数量无法正常上架的bug

2.在部分情况下无法正常上架商品的bug

3.玩家市场上架界面即使没填内容也可以正常上架的bug

4.每晚12点更新时传送指令的错误

5.商店系统&&回收系统无法正常购买&&回收的bug

**配置说明:您可以前往[NIA服务器官方文档站](https://docs.mcnia.top/zh-CN/deploy.html)查看具体部署过程!**

212 changes: 132 additions & 80 deletions NIA-Server-BOT/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var AccountOnline = false;
var ServerStarted = false;

//初始化配置文件格式,请勿更改!!!!
var config = {"platform": 6,"account": 123456,"password": "","QQGroup": 123456789}
var config = {"platform": 6,"account": 123456,"password": "","QQGroup": 123456789,"owner": [123456]}
var client = createClient({platform:config.platform})
var account = config.account
var password = config.password
Expand All @@ -22,30 +22,34 @@ var group = client.pickGroup(config.QQGroup)
//配置文件地址
const cfg_path = "./config.json";

const ERROR = "[NIA-Server-BOT] \x1b[31m[ERROR]\x1b[0m [" + new Date().toLocaleString('zh', { hour12: false }).replaceAll('/', '-') + "] "
const INFO = "[NIA-Server-BOT] \x1b[32m[INFO]\x1b[0m [" + new Date().toLocaleString('zh', { hour12: false }).replaceAll('/', '-') + "] "
const WARN = "[NIA-Server-BOT] \x1b[33m[WARN]\x1b[0m [" + new Date().toLocaleString('zh', { hour12: false }).replaceAll('/', '-') + "] "

//判断配置文件是否存在
fs.access(cfg_path, (err) => {
//不存在
if (err) {
fs.writeFile(cfg_path, JSON.stringify(config), 'utf-8', (err) => {
fs.writeFile(cfg_path, JSON.stringify(config,null,4), 'utf-8', (err) => {
if (err) {
return console.log('该文件不存在,重新创建失败!')
return console.log(ERROR + '该文件不存在,重新创建失败!')
}
});
console.log("配置文件不存在,已重新创建,请修改配置文件后再运行!");
console.log(WARN + "配置文件不存在,已重新创建,请修改配置文件后再运行!");
//直接结束本次进程
process.exit(1)
} else {
//存在,读取配置文件
fs.readFile(cfg_path,(err,data) => {
if (err) {
return console.log("配置文件读取错误!")
return console.log(ERROR + "配置文件读取错误!")
}
config = JSON.parse(data.toString())
//再次读取配置文件中的数据
account = config.account
password = config.password
group = client.pickGroup(config.QQGroup)
console.log("配置文件数据读取成功,正在启动机器人!");
console.log(INFO + "配置文件数据读取成功,正在启动机器人!");
//登录qq机器人
client = createClient({platform:config.platform})
client.on('system.login.slider', (e) => {
Expand Down Expand Up @@ -82,40 +86,38 @@ fs.access(cfg_path, (err) => {
client.on('system.online', (e) => {
AccountOnline = true
group.sendMsg("机器人登陆成功!")
console.log("机器人登陆成功!")
console.log(INFO + "机器人登陆成功!")
group = client.pickGroup(config.QQGroup)
})
})
}
})

var commodities = []

//判断有没有market文件,没有直接初始化
fs.access("./market.json", (err) => {
//不存在
if (err) {
//没有文件直接创建
fs.writeFile("./market.json", "[]", 'utf-8', (err) => {
if (err) {
return console.log(ERROR + '该文件不存在且重新创建失败!')
process.exit(1)
}
});
} else {
fs.readFile("./market.json",(err,data) => {
if (err) {
return console.log(ERROR + "market文件读取错误!")
}
commodities = JSON.parse(data.toString())
})
console.log(INFO + "market.json已成功读取!")
}
})


// fs.access("./market.json", (err) => {
// //不存在
// if (err) {
// fs.writeFile("./market.json", JSON.stringify("{}"), 'utf-8', (err) => {
// if (err) {
// return console.log('该文件不存在且重新创建失败!')
// process.exit(1)
// }
// });
// } else {
// //存在,读取配置文件
// fs.readFile(("./market.json",(err,data) => {
// if (err) {
// return console.log("配置文件读取错误!")
// }
// marketData = JSON.parse(data.toString())
// marketData.push(itemData)
// fs.writeFile("./market.json",JSON.stringify(marketData),function(err){
// if(err){
// console.error(err);
// }
// console.log('----------新增成功-------------');
// })
// }))
// }
// })



Expand Down Expand Up @@ -151,13 +153,31 @@ server.on("request", (req, res) => {
break;
//与mc服务器进行通讯,接受其请求
case "/Check":
ServerStarted = true;
if (!ServerStarted) {
ServerStarted = true;
console.log(INFO + "已经与MC服务器成功连接!")
}
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain;charset=utf-8');
res.end(JSON.stringify(repData));
repData = {}
repData.msgboxs = []
break;
case '/MarketInitialize':
fs.readFile("./market.json",(err,data) => {
if (err) {
return console.log(ERROR + "market文件读取错误!")
}
commodities = JSON.parse(data.toString())
//开始读取文件
res.statusCode = 200;
ServerStarted = true;
res.setHeader('Content-Type', 'text/plain;charset=utf-8');
res.end(JSON.stringify(commodities));
group.sendMsg("交易市场数据获得成功")
console.log(INFO + "market.json已成功读取!")
})
break;
//监听服务器开服
case '/ServerStarted':
res.statusCode = 200;
Expand Down Expand Up @@ -203,77 +223,109 @@ server.on("request", (req, res) => {
}
})
break;
case '/Market':
//开始读取文件
// let commodities = {}
// fs.readFileSync("./market.json",(err,data) => {
// if (err) {
// //
// return console.log("market文件读取错误!")
// }
// commodities = JSON.parse(data.toString())
// })
// res.statusCode = 200;
// res.setHeader('Content-Type', 'text/plain;charset=utf-8');
// res.end(JSON.stringify(commodities));
break;
//监听玩家市场上架物品
case '/Shelf':
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain;charset=utf-8');
res.end("success")
req.on("data", (data) => {
arr.push(data)
})
let result = false
req.on("end", () => {
let itemData = JSON.parse(Buffer.concat(arr).toString())
if (AccountOnline) {
group.sendMsg(`【玩家市场上新提醒】\n玩家 ${itemData.playerName} 在市场中上架了全新的商品!\n商品名称: ${itemData.name} (${itemData.typeid}) \n商品简介: ${itemData.description} \n商品单价: ${itemData.price}\n商品剩余库存: ${itemData.amount}\n商品流水号: ${itemData.id} \n想要的玩家赶快上线购买吧!`)
//group.sendMsg(JSON.stringify(itemData,null,2))
fs.access("./market.json", (err) => {
//不存在
fs.readFile("./market.json",(err,data) => {
if (err) {
//没有文件直接创建
fs.writeFile("./market.json", "[]", 'utf-8', (err) => {
if (err) {
return console.log('该文件不存在且重新创建失败!')
process.exit(1)
}
});
//创建成功后直接读取
marketData = []
marketData.push(itemData)
fs.writeFile("./market.json",JSON.stringify(marketData),function(err){
if(err){
result = false
return console.error(err);
}
result = true
console.log('新增成功');
})
} else {
//存在,读取配置文件
fs.readFile("./market.json",(err,data) => {
if (err) {
result = false
return console.log("配置文件读取错误!")
}
marketData = JSON.parse(data.toString())
marketData.push(itemData)
fs.writeFile("./market.json",JSON.stringify(marketData),function(err){
if(err){
console.error(err);
}
result = false
})
})
//
return console.log("market文件读取错误!")
}
marketData = JSON.parse(data.toString())
marketData.push(itemData)
fs.writeFile("./market.json",JSON.stringify(marketData,null,4),function(err){
if(err){
console.error(err);
}
errInfo = {}
errInfo.info = "shelf"
repData.errData = marketData
})
})
// fs.access("./market.json", (err) => {
// //不存在
// if (err) {
// //没有文件直接创建
// fs.writeFile("./market.json", "[]", 'utf-8', (err) => {
// if (err) {
// return console.log('该文件不存在且重新创建失败!')
// process.exit(1)
// }
// });
// //创建成功后直接读取
// marketData = []
// marketData.push(itemData)
// fs.writeFile("./market.json",JSON.stringify(marketData,null,4),function(err){
// if(err){
// res.statusCode = 201;
// return console.error(err);
// }
// console.log('新增成功');
// res.statusCode = 200;
// })
// } else {
// //存在,读取配置文件
// fs.readFile("./market.json",(err,data) => {
// if (err) {
// res.statusCode = 201;
// return console.log("配置文件读取错误!")
// }
// marketData = JSON.parse(data.toString())
// marketData.push(itemData)
// fs.writeFile("./market.json",JSON.stringify(marketData,null,4),function(err){
// if(err){
// console.error(err);
// }
// res.statusCode = 200;
// })
// })
// }
// })
}
})
if (result) {
res.statusCode = 200;
res.end("success");
} else {
res.statusCode = 201;
res.end ("failure")
}
// if (result) {
// res.statusCode = 200;
// console.log("123")
// } else {
// res.statusCode = 201;
// console.log("456")
// }
break;
}
})

//监听服务器开启成功提醒
server.listen(port,'127.0.0.1', () => {
console.info(`NIA服务器监听服务器已经成功在 http://127.0.0.1:${port} 启动!`);
console.info(INFO + "NIA服务器监听服务器已经成功在 http://127.0.0.1:" + port + " 启动!");
});

//监听群聊消息
client.on('message.group', (e) => {
//等适配
if (e.group_id == config.QQGroup && e.sender.user_id != 3467371607) {
if (e.message[0].text.toString().slice(0,1) == "-") {
if (PLAYERCMDS.indexOf(e.message[0].text.toString().slice(1)) != -1) {
Expand Down Expand Up @@ -316,6 +368,6 @@ setInterval(() => {
}
}
if (!ServerStarted && AccountOnline) {
console.log("[Error] 暂未连接到MC服务器!")
console.log(ERROR + "暂未连接到MC服务器!")
}
}, 10000)
Loading

0 comments on commit 6d22628

Please sign in to comment.