2
0
mirror of https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git synced 2024-12-23 03:20:52 +08:00
xiaoyao-cvs-plugin/apps/Note.js
2023-04-14 22:09:57 +08:00

368 lines
9.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import fetch from "node-fetch";
import fs from "fs";
import {
isV3
} from '../components/Changelog.js'
import gsCfg from '../model/gsCfg.js'
import {
Cfg,
Data
} from "../components/index.js";
import utils from "../model/mys/utils.js";
import note from '../model/note.js'
import User from "../model/user.js";
const _path = process.cwd();
let tempDataUrl = `${_path}/plugins/xiaoyao-cvs-plugin/data/NoteTemp`
let tempData = {};
init()
function init() {
Data.createDir("", tempDataUrl, false);
tempData = Data.readJSON(tempDataUrl, "tempData")
}
//#体力
export async function Note(e, {
render
}, poke) {
if (!Cfg.get("sys.Note") && !poke && !e?.isTask) {
return false;
}
let notes = new note(e);
let cookie, uid, res;
if (isV3) {
if (e.msg.replace(/全|全部/g, '多').includes('多')) {
let ck = await gsCfg.getBingCkSingle(e.user_id)
if (Object.keys(ck).length == 0) {
e.reply(`请先【#绑定cookie】`)
return true;
}
let sendMsg = []
e._reply = e.reply;
e.reply = ((msg) => {
sendMsg.push(msg)
})
if (Object.keys(ck).length > 1) {
e._reply(`多账号体力查询中请稍等...`)
}
for (let item of Object.keys(ck)) {
let res = await (await e.runtime.createMysApi(ck[item].uid, ck[item].ck)).getData('dailyNote')
await notes.getNote(ck[item].ck, ck[item].uid, res, { render })
}
e._reply(sendMsg)
return true;
}
let MysInfo = await import(`file://${_path}/plugins/genshin/model/mys/mysInfo.js`);
res = await MysInfo.default.get(e, 'dailyNote')
if (!res || res.retcode !== 0) return true
uid = e.uid;
} else {
if (NoteCookie[e.user_id]) {
cookie = NoteCookie[e.user_id].cookie;
uid = NoteCookie[e.user_id].uid;
} else if (BotConfig.dailyNote && BotConfig.dailyNote[e.user_id]) {
cookie = BotConfig.dailyNote[e.user_id].cookie;
uid = BotConfig.dailyNote[e.user_id].uid;
} else {
e.reply(`尚未配置,无法查询体力\n配置教程:${BotConfig.cookieDoc}`);
return true;
}
const response = await getDailyNote(uid, cookie);
if (!response.ok) {
e.reply("米游社接口错误");
return true;
}
res = await response.json();
if (res.retcode == 10102) {
if (!e.openDailyNote) {
e.openDailyNote = true;
await openDailyNote(cookie); //自动开启
dailyNote(e);
} else {
e.reply("请先开启实时便笺数据展示");
}
return true;
}
if (res.retcode != 0) {
if (res.message == "Please login") {
Bot.logger.mark(`体力cookie已失效`);
e.reply(`体力cookie已失效请重新配置\n注意退出米游社登录cookie将会失效`);
if (NoteCookie[e.user_id]) {
// await MysUser.delNote(NoteCookie[e.user_id]);
delete NoteCookie[e.user_id];
saveJson();
}
} else {
e.reply(`体力查询错误:${res.message}`);
Bot.logger.mark(`体力查询错误:${JSON.stringify(res)}`);
}
return true;
}
//redis保存uid
redis.set(`genshin:uid:${e.user_id}`, uid, {
EX: 2592000
});
//更新
if (NoteCookie[e.user_id]) {
NoteCookie[e.user_id].maxTime = new Date().getTime() + res.data.resin_recovery_time * 1000;
saveJson();
}
}
return await notes.getNote(cookie, uid, res, { render })
}
async function getDailyNote(uid, cookie) {
let mysApi = (await import(`file://${_path}/lib/app/mysApi.js`))
let {
url,
headers,
query,
body
} = mysApi.getUrl("dailyNote", uid);
headers.Cookie = cookie;
const response = await fetch(url, {
method: "get",
headers
});
return response;
}
export async function saveJson() {
let path = "data/NoteCookie/NoteCookie.json";
fs.writeFileSync(path, JSON.stringify(NoteCookie, "", "\t"));
}
export async function noteTask(e) {
if (e.isPrivate) {
return true;
}
let notes = new note(e);
let user = new User(e)
let {
cookie
} = await user.getCookie(e)
e.isbool = e.msg.includes("开启")
e.isgl = e.msg.includes("群")
if (!cookie && e.isbool && !e.isgl) {
e.reply("请先#绑定ck\n发送【体力帮助】获取教程")
return false;
}
if (e.isgl) {
notes.updNote(e)
} else if (e.isbool && e.msg.includes("体力推送")) {
notes.addNote()
} else {
notes.delNote()
}
return true;
}
//体力定时推送
export async function DailyNoteTask() {
//推送cd12小时一次
let sendCD = 12 * 3600;
let notes = new note();
for (let item in notes.noteCfg) {
let group = notes.noteCfg[item]
if (!group?.isTask) continue;
let taskUser = group.task;
for (let i of taskUser) {
let e = {
user_id: i,
qq: i,
msg: "体力",
sendResin: group.sendResin,
isTask: true,
}
//今天已经提醒
let sendkey = `xiaoyao:dailyNote:send:${i}`;
let send = await redis.get(sendkey);
if (!Bot.pickGroup(item).pickMember(i) || send) continue;
let sendMsg = [segment.at(i * 1), "哥哥(姐姐)你的体力快满了哦~"]
e.reply = (msg) => {
sendMsg.push(msg)
};
let render;
if (isV3) {
let {
getRender
} = await import(`file://${_path}/plugins/xiaoyao-cvs-plugin/adapter/render.js`);
render = await getRender()
} else {
let {
getPluginRender
} = await import(`file://${_path}/lib/render.js`);
render = await getPluginRender()
}
let task = await Note(e, {
render
});
if (!task) {
redis.set(sendkey, "1", {
EX: sendCD
});
Bot.pickGroup(item).sendMsg(sendMsg)
}
}
}
}
export async function pokeNote(e, {
render
}) {
if (!Cfg.get("note.poke")) {
return false;
}
return await Note(e, {
render
}, "poke");
}
export async function Note_appoint(e) {
let mbPath = `${_path}/plugins/xiaoyao-cvs-plugin/resources/dailyNote/`;
let isDel = e.msg.includes("移除")
let msg = e.msg.replace(/#|井|体力|模板|设置|移除/g, "");
let All = ["默认", "随机", "0"];
let urlType = note_file();
let keyType = Object.keys(urlType);
if (!isNaN(msg) && msg != 0) {
if (msg > keyType.length) {
e.reply(`没有${msg}的索引序号哦~`)
return true;
}
msg = keyType[msg - 1];
}
let type = 0;
if (msg.includes("列表")) {
let isUser = msg.includes('我的')
let temp = tempData[e.user_id]?.temp;
if ((!temp || temp?.length === 0) && isUser) {
e.reply("未获取到您设置的模板信息哦~")
return true;
}
let xlmsg = msg.replace(/列表|我的/g, "") * 1 || 1
let listLength = isUser ? temp.length : keyType.length
let sumCount = (listLength / 80 + 0.49).toFixed(0);
xlmsg = sumCount - xlmsg > -1 ? xlmsg : sumCount == 0 ? 1 : sumCount;
let xxmsg = (xlmsg - 1) <= 0 ? 0 : 80 * (xlmsg - 1)
let count = 0;
let msgData = [`模板列表共,第${xlmsg}页,共${listLength}张,\n您可通过【#体力模板设置1】来绑定你需要的体力模板~\n请选择序号~~\n当前支持选择的模板有:`];
for (let [index, item] of keyType.entries()) {
let msg_pass = [];
let imgurl;
let pathFile = urlType[item].replace(/\./, _path)
if (item.includes(".")) {
imgurl = await segment.image(`file://${pathFile}`);
item = item.split(".")[0];
} else {
imgurl = await segment.image(
`file://${pathFile}/icon/bg/${fs.readdirSync(`${pathFile}/icon/bg/`)[0]}`
)
}
if (isUser && !temp?.includes(item)) {
continue;
}
item = index + 1 + "." + item
count++;
if (msgData.length == 81) {
break;
}
if (index < xxmsg) {
continue;
}
msg_pass.push(item)
if (imgurl) {
msg_pass.push(imgurl)
}
msgData.push(msg_pass)
}
let endMsg = "";
if (count < listLength) {
endMsg = `更多内容请翻页查看\n如:#体力模板列表2`
} else {
endMsg = `已经到底了~~`
}
msgData.push(endMsg)
await utils.replyMake(e, msgData, 0)
return true;
}
if (keyType.includes(msg + ".png")) {
msg = msg + ".png";
}
if (!keyType.includes(msg) && !All.includes(msg)) {
e.reply("没有找到你想要的模板昵!可输入 【#体力模板列表】 查询当前支持的模板哦~~")
return true;
} else if (All.includes(msg)) {
type = -1;
} else {
type = 1
if (msg.includes(".")) {
type = 0
}
}
let temp = [];
if (!tempData[e.user_id]) {
tempData[e.user_id] = {
temp: [],
type: type,
}
}
if (typeof tempData[e.user_id]["temp"] === "string") {
temp = [tempData[e.user_id]["temp"], msg]
} else {
temp = tempData[e.user_id]["temp"]
if (!tempData[e.user_id]["temp"]?.includes(msg)) {
temp.push(msg)
}
}
let sendMsg = "诶~这是你选的模板吗,模板设置成功了快用指令来试试吧~"
if (isDel) {
if (temp.includes(msg)) {
temp.splice(temp.indexOf(msg), 1)
sendMsg = `模板${msg}已移除~`
}
}
tempData[e.user_id] = {
temp: temp,
type: type,
}
fs.writeFileSync(tempDataUrl + "/tempData.json", JSON.stringify(tempData));
init()
e.reply(sendMsg)
return true;
}
const note_file = function (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;
}