mirror of
https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git
synced 2024-12-23 11:40:51 +08:00
343 lines
11 KiB
JavaScript
343 lines
11 KiB
JavaScript
import YAML from 'yaml'
|
|
import fs from 'node:fs'
|
|
import lodash from 'lodash'
|
|
import {
|
|
Cfg,
|
|
Data
|
|
} from "../components/index.js";
|
|
import moment from 'moment'
|
|
import Common from "../components/Common.js";
|
|
import gsCfg from './gsCfg.js'
|
|
import {
|
|
isV3
|
|
} from '../components/Changelog.js'
|
|
const plugin = 'xiaoyao-cvs-plugin'
|
|
const _path = process.cwd();
|
|
let path_url = ["dailyNote", "xiaoyao_Note"];
|
|
let path_img = ["background_image", "/icon/bg"];
|
|
/** 配置文件 */
|
|
export default class note {
|
|
constructor(e) {
|
|
if(e){
|
|
this.e = e
|
|
}
|
|
this.Cfg = `./plugins/${plugin}/config/`
|
|
this.role_user = Data.readJSON(`${_path}/plugins/xiaoyao-cvs-plugin/resources/dailyNote/json/`, "dispatch_time");
|
|
gsCfg.cpCfg("config", "note")
|
|
this.tempData = Data.readJSON(`./plugins/xiaoyao-cvs-plugin/data/NoteTemp`, "tempData")
|
|
this.noteCfg = gsCfg.getfileYaml(this.Cfg, "note") || {}
|
|
this.cfg = gsCfg.getfileYaml(`./plugins/xiaoyao-cvs-plugin/config/`, "config");
|
|
}
|
|
addNote() {
|
|
this.isGroup()
|
|
if (!this.isTaskAdmin()) return true;
|
|
let userId = this.noteCfg[this.e.group_id]["task"] || [];
|
|
if (!userId.includes(this.e.user_id)) {
|
|
userId.push(this.e.user_id)
|
|
}
|
|
this.noteCfg[this.e.group_id]["task"] = userId
|
|
this.saveNote(this.noteCfg)
|
|
this.e.reply("体力推送开启成功~\n后续每天会为您推送体力")
|
|
}
|
|
delNote() {
|
|
try {
|
|
if (this.noteCfg[this.e.group_id]) {
|
|
if (!this.isTaskAdmin()) return true;
|
|
let userId = this.noteCfg[this.e.group_id]["task"] || [];
|
|
if (userId.length > 0) {
|
|
userId.splice(userId.indexOf(this.e.user_id),
|
|
1) //.join('').replace(new RegExp(`${this.e.user_id}`)).split("")
|
|
this.noteCfg[this.e.group_id]["task"] = userId
|
|
this.saveNote(this.noteCfg)
|
|
this.e.reply("体力推送关闭成功~\n后续将不会为您推送体力")
|
|
}
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
updNote() {
|
|
this.isGroup()
|
|
if (this.cfg.noteSetAuth === 2) {
|
|
if (!this.e.isMaster) {
|
|
this.e.reply('只有主人才能操作。')
|
|
return false
|
|
}
|
|
}
|
|
if (this.cfg.noteSetAuth === 1 && !this.e?.isMaster) {
|
|
if (!(this.e.sender.role === 'owner' || this.e.sender.role === 'admin')) {
|
|
this.e.reply('只有管理员才能操作。')
|
|
return false
|
|
}
|
|
}
|
|
let set = this.e.msg.includes("推送")
|
|
if (set) {
|
|
let bool = this.e.msg.includes("开启")
|
|
this.noteCfg[this.e.group_id].isTask = bool
|
|
} else {
|
|
let num = this.e.msg.replace(/[^0-9]/ig, '')
|
|
this.noteCfg[this.e.group_id].sendResin = Math.min(160, Math.max(20, num * 1 || 120));
|
|
}
|
|
this.saveNote(this.noteCfg)
|
|
this.e.reply(this.e.msg.replace('#', '') + "操作成功~", true)
|
|
}
|
|
saveNote(data) {
|
|
if (!data) return false;
|
|
let yaml = YAML.stringify(data)
|
|
fs.writeFileSync(`${this.Cfg}note.yaml`, yaml, 'utf8')
|
|
}
|
|
isTaskAdmin() {
|
|
this.isGroup()
|
|
if (!this.noteCfg[this.e.group_id]["isTask"]) {
|
|
this.e.reply("群体力推送关闭了~\n请联系管理员开启功能~")
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
isGroup(){
|
|
if (!this.noteCfg[this.e.group_id]) { //首次直接设置
|
|
this.noteCfg[this.e.group_id] = {
|
|
"task": [],
|
|
"isTask": true,
|
|
"sendResin": 120
|
|
}
|
|
}
|
|
}
|
|
|
|
async getNote(cookie, uid, res,{render}){
|
|
if (!res || res.retcode !== 0) return true
|
|
|
|
let data = res.data;
|
|
//推送任务
|
|
if (this.e.isTask && data.current_resin < this.e.sendResin) {
|
|
return true;
|
|
}
|
|
if (this.e.isTask) {
|
|
Bot.logger.mark(`体力推送:${this.e.user_id}`);
|
|
}
|
|
let nowDay = moment(new Date()).format("DD");
|
|
let resinMaxTime;
|
|
let resinMaxTime_mb2;
|
|
let resinMaxTime_mb2Day;
|
|
if (data.resin_recovery_time > 0) {
|
|
resinMaxTime = new Date().getTime() + data.resin_recovery_time * 1000;
|
|
let maxDate = new Date(resinMaxTime);
|
|
resinMaxTime = moment(maxDate).format("HH:mm");
|
|
let Time_day = await this.dateTime_(maxDate)
|
|
resinMaxTime_mb2 = Time_day + moment(maxDate).format("hh:mm");
|
|
if (moment(maxDate).format("DD") != nowDay) {
|
|
resinMaxTime_mb2Day = `明天`;
|
|
resinMaxTime = `明天 ${resinMaxTime}`;
|
|
} else {
|
|
resinMaxTime_mb2Day = `今天`;
|
|
resinMaxTime = ` ${resinMaxTime}`;
|
|
}
|
|
}
|
|
for (let val of data.expeditions) {
|
|
if (val.remained_time <= 0) {
|
|
val.percentage = 0;
|
|
}
|
|
if (val.remained_time > 0) {
|
|
val.dq_time = val.remained_time;
|
|
val.remained_time = new Date().getTime() + val.remained_time * 1000;
|
|
var urls_avatar_side = val.avatar_side_icon.split("_");
|
|
let Botcfg;
|
|
if (isV3) {
|
|
Botcfg = (await import(`file://${_path}/plugins/genshin/model/gsCfg.js`)).default;
|
|
} else {
|
|
Botcfg = YunzaiApps.mysInfo
|
|
}
|
|
let id = Botcfg.roleIdToName(urls_avatar_side[urls_avatar_side.length - 1].replace(
|
|
/(.png|.jpg)/g, ""));
|
|
let name = Botcfg.roleIdToName(id, true);
|
|
var time_cha = 20;
|
|
if (this.role_user["12"].includes(name)) {
|
|
time_cha = 15;
|
|
}
|
|
val.percentage = ((val.dq_time / 60 / 60 * 1 / time_cha) * 100 / 10).toFixed(0) * 10;
|
|
let remainedDate = new Date(val.remained_time);
|
|
val.remained_time = moment(remainedDate).format("HH:mm");
|
|
let Time_day = await this.dateTime_(remainedDate)
|
|
if (moment(remainedDate).format("DD") != nowDay) {
|
|
val.remained_mb2 = "明天" + Time_day + moment(remainedDate).format("hh:mm");
|
|
val.remained_time = `明天 ${val.remained_time}`;
|
|
} else {
|
|
val.remained_mb2 = "今天" + Time_day + moment(remainedDate).format("hh:mm");
|
|
val.remained_time = ` ${val.remained_time}`;
|
|
}
|
|
val.mb2_icon = val.avatar_side_icon
|
|
}
|
|
}
|
|
|
|
let remained_time = "";
|
|
if (data.expeditions && data.expeditions.length >= 1) {
|
|
remained_time = lodash.map(data.expeditions, "remained_time");
|
|
remained_time = lodash.min(remained_time);
|
|
if (remained_time > 0) {
|
|
remained_time = new Date().getTime() + remained_time * 1000;
|
|
let remainedDate = new Date(remained_time);
|
|
remained_time = moment(remainedDate).format("hh:mm");
|
|
if (moment(remainedDate).format("DD") != nowDay) {
|
|
remained_time = `明天 ${remained_time}`;
|
|
} else {
|
|
remained_time = ` ${remained_time}`;
|
|
}
|
|
}
|
|
}
|
|
|
|
let coinTime_mb2 = "";
|
|
let coinTime_mb2Day = "";
|
|
let coinTime = "";
|
|
var chnNumChar = ["零", "明", "后", "三", "四", "五", "六", "七", "八", "九"];
|
|
if (data.home_coin_recovery_time > 0) {
|
|
let coinDate = new Date(new Date().getTime() + data.home_coin_recovery_time * 1000);
|
|
let coinDay = Math.floor(data.home_coin_recovery_time / 3600 / 24);
|
|
let coinHour = Math.floor((data.home_coin_recovery_time / 3600) % 24);
|
|
let coinMin = Math.floor((data.home_coin_recovery_time / 60) % 60);
|
|
if (coinDay > 0) {
|
|
coinTime = `${coinDay}天${coinHour}小时${coinMin}分钟`;
|
|
let dayTime = (24 - moment(new Date()).format('HH') + moment(coinDate).diff(new Date(), 'hours')) / 24
|
|
coinTime_mb2Day = chnNumChar[dayTime.toFixed(0)] + "天";
|
|
let Time_day = await this.dateTime_(coinDate)
|
|
coinTime_mb2 = Time_day + moment(coinDate).format("hh:mm");
|
|
} else {
|
|
coinTime_mb2 = moment(coinDate).format("hh:mm");
|
|
if (moment(coinDate).format("DD") != nowDay) {
|
|
coinTime_mb2Day = "明天";
|
|
coinTime = `明天 ${ moment(coinDate).format("hh:mm")}`;
|
|
} else {
|
|
coinTime_mb2Day = "今天";
|
|
coinTime = moment(coinDate).format("hh:mm", coinDate);
|
|
}
|
|
}
|
|
}
|
|
|
|
let day = moment(new Date()).format("MM-DD HH:mm");
|
|
let week = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
|
|
day += " " + week[new Date().getDay()];
|
|
let day_mb2 = moment(new Date()).format("yyyy年MM月DD日 HH:mm") + " " + week[new Date().getDay()];
|
|
//参量质变仪
|
|
if (data?.transformer?.obtained) {
|
|
data.transformer.reached = data.transformer.recovery_time.reached;
|
|
let recovery_time = "";
|
|
if (data.transformer.recovery_time.Day > 0) {
|
|
recovery_time += `${data.transformer.recovery_time.Day}天`;
|
|
}
|
|
if (data.transformer.recovery_time.Hour > 0) {
|
|
recovery_time += `${data.transformer.recovery_time.Hour}小时`;
|
|
}
|
|
if (data.transformer.recovery_time.Minute > 0) {
|
|
recovery_time += `${data.transformer.recovery_time.Minute}分钟`;
|
|
}
|
|
data.transformer.recovery_time = recovery_time;
|
|
}
|
|
let mb = Cfg.get("mb.len", 0) - 1;
|
|
if (mb < 0) {
|
|
mb = lodash.random(0, path_url.length - 1);
|
|
}
|
|
let urlType = this.note_file("xiaoyao");
|
|
let objFile = Object.keys(urlType)
|
|
let defFile;
|
|
if (objFile.length > 0) {
|
|
objFile = objFile[lodash.random(0, objFile.length - 1)]
|
|
defFile=objFile;
|
|
}
|
|
let img_path = `./plugins/xiaoyao-cvs-plugin/resources/dailyNote/${path_img[mb]}`;
|
|
if (this.tempData[this.e.user_id] && this.tempData[this.e.user_id].type > -1&&this.tempData[this.e.user_id]?.temp?.length!==0) {
|
|
// mb = tempData[e.user_id].type;
|
|
if (typeof this.tempData[this.e.user_id]["temp"] === "string") {
|
|
objFile = this.tempData[this.e.user_id]["temp"]
|
|
} else {
|
|
objFile = this.tempData[this.e.user_id].temp[lodash.random(0, this.tempData[this.e.user_id].temp.length - 1)];
|
|
}
|
|
if (objFile.includes(".")) { //对于模板类型处理
|
|
mb = 0;
|
|
} else {
|
|
mb = 1
|
|
}
|
|
}
|
|
if (mb == 1) {
|
|
for (var i = 0; i < 5 - data.expeditions.length; i++) {
|
|
data.expeditions.push({
|
|
remained_time: 0,
|
|
remained_mb2: 0,
|
|
percentage: 0,
|
|
mb2_icon: ""
|
|
})
|
|
}
|
|
// console.log(urlType,objFile,path_img)
|
|
img_path = `${urlType[objFile]}${path_img[mb]}`;
|
|
if (!fs.existsSync(img_path)) {
|
|
img_path=`${urlType[defFile]}${path_img[mb]}`;
|
|
}
|
|
}
|
|
var image = fs.readdirSync(img_path);
|
|
var list_img = [];
|
|
for (let val of image) {
|
|
list_img.push(val)
|
|
}
|
|
var imgs = list_img.length == 1 ? list_img[0] : list_img[lodash.random(0, list_img.length - 1)];
|
|
if (mb == 0 && objFile.includes(".")) {
|
|
imgs = objFile
|
|
}
|
|
await Common.render(`dailyNote/${path_url[mb]}`, {
|
|
save_id: uid,
|
|
uid: uid,
|
|
coinTime_mb2Day,
|
|
coinTime_mb2,
|
|
urlType: encodeURIComponent(img_path.replace(
|
|
/(\.\/plugins\/xiaoyao-cvs-plugin\/resources\/|\/icon\/bg)/g, '')).replace(/%2F/g, "/"),
|
|
resinMaxTime_mb2Day,
|
|
resinMaxTime,
|
|
resinMaxTime_mb2,
|
|
remained_time,
|
|
coinTime,
|
|
imgs: encodeURIComponent(imgs),
|
|
day_mb2,
|
|
day,
|
|
...data,
|
|
}, {
|
|
e:this.e,
|
|
render,
|
|
scale: 1.2
|
|
})
|
|
return !this.e?.isTask;
|
|
}
|
|
|
|
async dateTime_(time) {
|
|
return moment(time).format("HH") < 6 ? "凌晨" : moment(time).format("HH") < 12 ? "上午" : moment(time).format(
|
|
"HH") < 17.5 ? "下午" : moment(time).format("HH") < 19.5 ? "傍晚" : moment(time).format("HH") < 22 ? "晚上" :
|
|
"深夜";
|
|
}
|
|
|
|
note_file(xiaoyao) {
|
|
let url1 = `./plugins/xiaoyao-cvs-plugin/resources/dailyNote/Template/`
|
|
let url2 = `./plugins/xiaoyao-cvs-plugin/resources/BJT-Templet/` //冤种情况。。
|
|
let url3 = `./plugins/xiaoyao-cvs-plugin/resources/dailyNote/background_image/`
|
|
var urlFile = fs.readdirSync(url1);
|
|
var urlType = {};
|
|
for (let val of urlFile) {
|
|
if (val.includes(".")) continue;
|
|
urlType[val] = url1 + val
|
|
}
|
|
if (fs.existsSync(url2)) {
|
|
var bJTurlFile = fs.readdirSync(url2);
|
|
for (let val of bJTurlFile) {
|
|
if (!val.includes("Template")) continue;
|
|
let file = fs.readdirSync(`${url2}${val}`);
|
|
for (let va of file) {
|
|
if (va.includes(".")) continue;
|
|
urlType[va] = url2 + val + "/" + va
|
|
}
|
|
}
|
|
}
|
|
if (!xiaoyao) {
|
|
var urlFileOne = fs.readdirSync(url3);
|
|
for (let val of urlFileOne) {
|
|
if (!val.includes(".")) continue;
|
|
urlType[val] = url3 + val
|
|
}
|
|
}
|
|
return urlType;
|
|
}
|
|
|
|
}
|