2
0
mirror of https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git synced 2024-12-22 11:00:51 +08:00

更新下版本号

This commit is contained in:
Ctrlcvs 2022-10-31 13:57:07 +08:00
parent 1b458e794d
commit 42c817ff52
13 changed files with 1314 additions and 145 deletions

View File

@ -1,3 +1,12 @@
# 1.2.4
* 新增`群体力推送`
* 用户可通过`#开启、关闭体力推送` 来对体力推送进行操作
* 管理员可通过`#体力设置群推送关闭、开启` 以及推送阈值设置`#体力设置群阈值120` 仅支持群操作
* 新增`#我的体力模板列表`
* 优化体力模板设置,支持多个设置
* 新增`#图鉴模板更新`
* 用于更新体力模板具体来源由**@SunRyK** **@地球生物** **@逍遥** 三位作者上传
* 不会冲突已添加的模板数据,有需求可通过指令拉取
# 1.2.3
* 新增地图资源查询功能
* `#月莲在哪里` 指令类似 `某某物品在哪里`

View File

@ -50,5 +50,5 @@ git clone https://github.com/Ctrlcvs/xiaoyao-cvs-plugin.git ./plugins/xiaoyao-cv
- 图片素材来源于网络,仅供交流学习使用
- 严禁用于任何商业用途和非法行为
- Yunzai-Bot 官方QQ群213938015 (暂时停止新加入)
- 喵喵Miao-Plugin QQ群607710456 (暂时停止新加入)
- 图鉴xiaoyao-cvs-Plugin QQ群544570609(暂时不支持加入)
- 喵喵Miao-Plugin QQ群755269874
- 图鉴xiaoyao-cvs-Plugin QQ群544570609

View File

@ -15,6 +15,8 @@ import {
} from "../components/index.js";
import moment from 'moment';
import utils from "../model/mys/utils.js";
import note from '../model/note.js'
import User from "../model/user.js";
const _path = process.cwd();
let role_user = Data.readJSON(`${_path}/plugins/xiaoyao-cvs-plugin/resources/dailyNote/json/`, "dispatch_time");
@ -99,13 +101,11 @@ export async function Note(e, {
let data = res.data;
//推送任务
if (e.isTask && data.current_resin < e.sendResin) {
return;
return false;
}
if (e.isTask) {
Bot.logger.mark(`体力推送:${e.user_id}`);
}
let nowDay = moment(new Date()).format("DD");
let resinMaxTime;
let resinMaxTime_mb2;
@ -160,7 +160,6 @@ export async function Note(e, {
}
}
let remained_time = "";
if (data.expeditions && data.expeditions.length >= 1) {
remained_time = lodash.map(data.expeditions, "remained_time");
@ -188,7 +187,8 @@ export async function Note(e, {
let coinMin = Math.floor((data.home_coin_recovery_time / 60) % 60);
if (coinDay > 0) {
coinTime = `${coinDay}${coinHour}小时${coinMin}分钟`;
coinTime_mb2Day = chnNumChar[coinDay * 1] + "天";
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 dateTime_(coinDate)
coinTime_mb2 = Time_day + moment(coinDate).format("hh:mm");
} else {
@ -228,13 +228,14 @@ export async function Note(e, {
}
let urlType = note_file("xiaoyao");
if (urlType.length > 0) {
urlType = urlType[lodash.random(0, urlType.length - 1)]
let objFile = Object.keys(urlType)
if (objFile.length > 0) {
objFile = objFile[lodash.random(0, objFile.length - 1)]
}
let img_path = `./plugins/xiaoyao-cvs-plugin/resources/dailyNote/${path_img[mb]}`;
let img_path = `${urlType[objFile]}`;
if (tempData[e.user_id] && tempData[e.user_id].type > -1) {
mb = tempData[e.user_id].type;
urlType = tempData[e.user_id].temp;
objFile = tempData[e.user_id].temp;
}
if (mb == 1) {
for (var i = 0; i < 5 - data.expeditions.length; i++) {
@ -245,23 +246,26 @@ export async function Note(e, {
mb2_icon: ""
})
}
img_path = `./plugins/xiaoyao-cvs-plugin/resources/dailyNote/Template/${urlType}${path_img[mb]}`;
img_path = `${urlType[objFile]}${path_img[mb]}`;
}
var image = fs.readdirSync(img_path);
// console.log(fs.readdirSync(`./plugins/xiaoyao-cvs-plugin/resources/dailyNote/BJT-Templet/Template2`))
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 && urlType.includes(".")) {
imgs = urlType
if (mb == 0 && objFile.includes(".")) {
imgs = objFile
}
return await Common.render(`dailyNote/${path_url[mb]}`, {
save_id: uid,
uid: uid,
coinTime_mb2Day,
coinTime_mb2,
urlType: encodeURIComponent(urlType),
urlType: encodeURIComponent(img_path.replace(
/(\.\/plugins\/xiaoyao-cvs-plugin\/resources\/|\/icon\/bg)/g, '')).replace(/%2F/g, "/"),
resinMaxTime_mb2Day,
resinMaxTime,
resinMaxTime_mb2,
@ -294,7 +298,8 @@ async function getDailyNote(uid, cookie) {
} = mysApi.getUrl("dailyNote", uid);
headers.Cookie = cookie;
const response = await fetch(url, {
method: "get", headers
method: "get",
headers
});
return response;
}
@ -303,66 +308,77 @@ export async function saveJson() {
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() {
//体力大于多少时推送
let sendResin = 120;
//推送cd12小时一次
let sendCD = 12 * 3600;
if (isV3) {
return true;
}
//获取需要推送的用户
for (let [user_id, cookie] of Object.entries(NoteCookie)) {
user_id = cookie.qq || user_id;
//没有开启推送
if (!cookie.isPush) {
continue;
}
//今天已经提醒
let sendkey = `genshin:dailyNote:send:${user_id}`;
let send = await redis.get(sendkey);
if (send) {
continue;
}
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 = {
sendResin,
user_id,
isTask: true
};
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) => {
Bot.pickUser(user_id * 1).sendMsg(msg).catch((err) => {
Bot.logger.mark(err)
})
// common.relpyPrivate(user_id, msg);
sendMsg.push(msg)
};
//判断今天是否推送
if (cookie.maxTime && cookie.maxTime > 0 && new Date().getTime() > cookie.maxTime - (160 - sendResin) * 8 *
60 * 1000) {
Bot.logger.mark(`体力推送:${user_id}`);
redis.set(sendkey, "1", {
EX: sendCD
});
let render;
if (isV3) {
let {
getRender
} = await import(`file://${_path}/plugins/xiaoyao-cvs-plugin/render.js`);
await Note(e, {
render: await 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`);
await Note(e, {
render: await getPluginRender()
});
render = await getPluginRender()
}
let task = await Note(e, {
render
});
if (task) {
redis.set(sendkey, "1", {
EX: sendCD
});
Bot.pickGroup(item).sendMsg(sendMsg)
}
}
}
}
@ -385,32 +401,39 @@ export async function Note_appoint(e) {
let All = ["默认", "随机", "0"];
let urlType = note_file();
let keyType = Object.keys(urlType);
if (!isNaN(msg) && msg != 0) {
if (msg > urlType.length) {
if (msg > keyType.length) {
e.reply(`没有${msg}的索引序号哦~`)
return true;
}
msg = urlType[msg - 1];
msg = keyType[msg - 1];
}
let type = 0;
if (msg.includes("列表")) {
let xlmsg = msg.replace("列表", "") * 1 || 1
let sumCount = (urlType.length / 80 + 0.49).toFixed(0);
let isUser= msg.includes('我的')
let temp =tempData[e.user_id]["temp"];
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}页,共${urlType.length}张,\n您可通过【#体力模板设置1】来绑定你需要的体力模板~\n请选择序号~~\n当前支持选择的模板有:`];
for (let [index, item] of urlType.entries()) {
let msgData = [`模板列表共,第${xlmsg}页,共${listLength}张,\n您可通过【#体力模板设置1】来绑定你需要的体力模板~\n请选择序号~~\n当前支持选择的模板有:`];
for (let [index, item] of keyType.entries()) {
let msg_pass = [];
let imgurl;
if (item.includes(".")) {
imgurl = await segment.image(`file:///${mbPath}background_image/${item}`);
imgurl = await segment.image(`file:///${urlType[item]}`);
item = item.split(".")[0];
} else {
imgurl = await segment.image(
`file:///${mbPath}Template/${item}/icon/bg/${fs.readdirSync(`${mbPath}/Template/${item}/icon/bg/`)[0]}`
`file:///${urlType[item]}/icon/bg/${fs.readdirSync(`${urlType[item]}/icon/bg/`)[0]}`
)
}
if(isUser&&!temp.includes(item)){
continue;
}
item = index + 1 + "." + item
count++;
if (msgData.length == 81) {
@ -426,7 +449,7 @@ export async function Note_appoint(e) {
msgData.push(msg_pass)
}
let endMsg = "";
if (count < urlType.length) {
if (count < listLength) {
endMsg = `更多内容请翻页查看\n如:#体力模板列表2`
} else {
endMsg = `已经到底了~~`
@ -435,10 +458,10 @@ export async function Note_appoint(e) {
await utils.replyMake(e, msgData, 0)
return true;
}
if (urlType.includes(msg + ".png")) {
if (keyType.includes(msg + ".png")) {
msg = msg + ".png";
}
if (!urlType.includes(msg) && !All.includes(msg)) {
if (!keyType.includes(msg) && !All.includes(msg)) {
e.reply("没有找到你想要的模板昵!可输入 【#体力模板列表】 查询当前支持的模板哦~~")
return true;
} else if (All.includes(msg)) {
@ -449,8 +472,22 @@ export async function Note_appoint(e) {
type = 0
}
}
let temp = [];
if(!tempData[e.user_id]){
tempData[e.user_id] = {
temp: msg,
temp: [],
type: type,
}
}
if (typeof tempData[e.user_id]["temp"] === "string") {
temp = [tempData[e.user_id]["temp"], msg]
} else {
if(!tempData[e.user_id]["temp"].includes(msg)){
temp = [...tempData[e.user_id]["temp"], msg]
}
}
tempData[e.user_id] = {
temp: temp,
type: type,
}
fs.writeFileSync(tempDataUrl + "/tempData.json", JSON.stringify(tempData));
@ -460,18 +497,29 @@ export async function Note_appoint(e) {
}
const note_file = function(xiaoyao) {
var urlFile = fs.readdirSync(`./plugins/xiaoyao-cvs-plugin/resources/dailyNote/Template/`);
var urlType = [];
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 bJTurlFile = fs.readdirSync(url2);
var urlType = {};
for (let val of urlFile) {
if (val.includes(".")) continue;
urlType.push(val)
urlType[val] = url1 + val
}
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(`./plugins/xiaoyao-cvs-plugin/resources/dailyNote/background_image/`);
var urlFileOne = fs.readdirSync(url3);
for (let val of urlFileOne) {
if (!val.includes(".")) continue;
urlType.push(val)
urlType[val] = url3 + "background_image/" + val
}
}
return urlType;

View File

@ -37,6 +37,11 @@ export const rule = {
reg: "^#图鉴插件(强制)?更新",
describe: "【#管理】图鉴更新",
},
updateTemp:{
hashMark: true,
reg: "^#图鉴模板(强制)?更新$",
describe: "【#管理】更新素材",
},
sysCfg: {
hashMark: true,
reg: sysCfgReg,
@ -235,3 +240,55 @@ export async function updateMiaoPlugin(e) {
});
return true;
}
export async function updateTemp(e){
if (!await checkAuth(e)) {
return true;
}
let command = "";
let url=`${resPath}/BJT-Templet/`
if (fs.existsSync(url)) {
e.reply("开始尝试更新,请耐心等待~");
command = `git pull`;
let isForce = e.msg.includes("强制");
if (isForce) {
command = "git checkout . && git pull";
// command="git fetch --all && git reset --hard origin/master && git pull "
e.reply("正在执行强制更新操作,请稍等");
} else {
e.reply("正在执行更新操作,请稍等");
}
exec(command, {
cwd: url
}, function(error, stdout, stderr) {
//console.log(stdout);
if (/Already up to date/.test(stdout)||stdout.includes("最新")) {
e.reply("目前所有模板都已经是最新了~");
return true;
}
let numRet = /(\d*) files changed,/.exec(stdout);
if (numRet && numRet[1]) {
e.reply(`报告主人,更新成功,此次更新了${numRet[1]}个图片~`);
return true;
}
if (error) {
e.reply("更新失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
} else {
e.reply("体力扩展包更新成功~");
}
});
} else {
//@gitee @SunRyK @diqiushengwu @逍遥
command = `git clone https://gitee.com/SmallK111407/BJT-Template.git "${url}"`
// command = `git clone https://github.com/SmallK111407/BJT-Template.git "${resPath}/xiaoyao-plus/"`;\n此链接为github图床,如异常请请求多次
e.reply("开始尝试安装体力扩展包,可能会需要一段时间,请耐心等待~");
exec(command, function(error, stdout, stderr) {
if (error) {
e.reply("角色体力扩展包安装失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
} else {
e.reply("角色体力扩展包安装成功!您后续也可以通过 #图鉴模板更新 命令来更新图像");
}
});
}
return true;
}

View File

@ -7,43 +7,69 @@ import {
versionInfo,
help
} from "./help.js";
import {genShenMap} from './map.js'
import {
genShenMap
} from './map.js'
import {
Note,
DailyNoteTask,
Note_appoint,
noteTask,
pokeNote
} from "./Note.js";
import {
rule as adminRule,
updateRes,
sysCfg,
sysCfg,updateTemp,
updateMiaoPlugin
} from "./admin.js";
import {
currentVersion
} from "../components/Changelog.js";
import {
rule as userRule,delSign,updCookie,
userInfo,gclog,mytoken,bindStoken,cloudToken
rule as userRule,
delSign,
updCookie,
userInfo,
gclog,
mytoken,
bindStoken,
cloudToken
} from "./user.js"
import {
rule as signRule,
sign,bbsSign,cloudSign,seach,cookiesDocHelp,signTask
sign,
bbsSign,
cloudSign,
seach,
cookiesDocHelp,
signTask
} from "./sign.js"
export {
updateRes,delSign,cloudSign,seach,bbsSign,
gclog,mytoken,bindStoken,
updateMiaoPlugin,userInfo,
updateRes,updateTemp,
delSign,
cloudSign,
seach,
bbsSign,
gclog,
mytoken,
bindStoken,
updateMiaoPlugin,
userInfo,
sign,
versionInfo,cloudToken,
Note_appoint,signTask,
pokeNote,genShenMap,
versionInfo,
cloudToken,
Note_appoint,
signTask,
pokeNote,
genShenMap,
cookiesDocHelp,
sysCfg,
help,updCookie,
help,
updCookie,
DailyNoteTask,
noteTask,
AtlasAlias,
Note,
};
@ -68,13 +94,16 @@ let rule = {
reg: "^#*(体力|树脂|查询体力|便笺|便签)$",
describe: "体力",
},
noteTask: {
reg: "^#*((开启|关闭)体力推送|体力设置群(推送(开启|关闭)|(阈值|上限)(\\d*)))$",
describe: "体力推送",
},
Note_appoint: {
reg: "^#体力模板(设置(.*)|列表(.*))$",
reg: "^#体力模板(设置(.*)|列表(.*))|(#我的体力模板列表)$",
describe: "体力模板设置",
},
genShenMap:{
reg: "^#(.*)(在(哪|那)里)$",
genShenMap: {
reg: "^#(.*)(在(哪|那)里*)$",
describe: "地图资源查询 #**在哪里",
},
pokeNote: {
@ -94,26 +123,28 @@ lodash.forEach(rule, (r) => {
task();
//定时任务
async function task() {
if (typeof test != "undefined") return;
let set = gsCfg.getfileYaml(`${_path}/plugins/xiaoyao-cvs-plugin/config/`, "config")
schedule.scheduleJob(set.mysBbsTime, function() {
if (set.ismysSign) {
signTask('bbs')
}
}
);
});
schedule.scheduleJob(set.allSignTime, function() {
if (set.isSign) {
signTask('mys')
}
});
schedule.scheduleJob(set.YunSignTime, function() {
if (set.isYunSign) {
schedule.scheduleJob(set.cloudSignTime, function() {
if (set.isCloudSign) {
signTask('cloud')
}
});
schedule.scheduleJob(set.noteTask, function() {
if (set.isNoteTask) {
DailyNoteTask()
}
});
}

View File

@ -1,25 +0,0 @@
# cookies教程
cookiesDoc: docs.qq.com/doc/DV2tDY2ltSFdtbU9z
# 米币签到成功是否推送
isPushSign: false
# 米游社米币签到定时任务Cron表达式默认00:02开始执行签到
mysBbsTime: 0 2 0 * * ?
# 米币是否自动签到
ismysSign: true
# 签到成功是否推送
isAllSign: false
# 米游社签到定时任务Cron表达式默认00:02开始执行签到
allSignTime: 0 2 0 * * ?
# 是否自动签到
isSign: true
# 云原神是否自动签到
isYunSign: true
# 米游社签到定时任务Cron表达式默认04:02开始执行签到
YunSignTime: 0 2 4 * * ?
# 云原神签到成功是否推送
isYunSignMsg: false
# 云原神帮助
yunDoc: docs.qq.com/doc/DTnJIREZwTmxEVHBl

View File

@ -1,6 +1,4 @@
#此文件为默认配置请勿修改此文件
# cookies教程
# 配置文件修改后需要重启生效
# stoken 教程2由 @逍遥 提供 https://docs.qq.com/doc/DVFdKVHBRR3RaUWxL
cookiesDoc: docs.qq.com/doc/DV2tDY2ltSFdtbU9z
# 米币签到成功是否推送
@ -8,14 +6,14 @@ isPushSign: false
# 米游社米币签到定时任务Cron表达式默认00:02开始执行签到
mysBbsTime: 0 2 0 * * ?
# 米币是否自动签到
ismysSign: true
ismysSign: false
# 签到成功是否推送
isAllSign: false
# 米游社签到定时任务Cron表达式默认00:02开始执行签到
allSignTime: 0 2 0 * * ?
# 是否自动签到
isSign: true
isSign: false
# 默认签到游戏模板 仅支持 原神|崩坏3|崩坏2|未定事件簿
signlist:
- 原神
@ -24,14 +22,18 @@ signlist:
- 未定事件簿
# 云原神是否自动签到
isYunSign: true
isCloudSign: false
# 米游社签到定时任务Cron表达式默认04:02开始执行签到
YunSignTime: 0 2 4 * * ?
cloudSignTime: 0 2 4 * * ?
# 云原神签到成功是否推送
isYunSignMsg: false
isCloudSignMsg: false
# 云原神帮助 由 @FanSky_Qs 提供
yunDoc: docs.qq.com/doc/DTnJIREZwTmxEVHBl
cloudDoc: docs.qq.com/doc/DTnJIREZwTmxEVHBl
#更新抽卡记录缓存时间默认5分钟
gclogEx: 5
# 体力设置开启关闭权限 1-群管理员才能开启关闭 2-主人才能开启关闭
noteSetAuth: 1
noteSetAuth: 2
# 体力推送 间隔 10分钟检索一次
noteTask: 0 0/10 * * ?
# 全局开关体力推送 关闭后不可操作体力推送相关内容 true开启 false 关闭
isNoteTask: false

0
defSet/config/note.yaml Normal file
View File

918
defSet/json/map.yaml Normal file
View File

@ -0,0 +1,918 @@
#别名配置文件
传送点:
七天神像:
- 七天神像
- 神像
传送锚点:
- 传送锚点
- 锚点
- 世界锚点
- 传送点
秘境:
- 秘境
南十字·死兆星:
- 南十字·死兆星
- 死兆星
- 南十字
- 北斗船队
群玉阁:
- 群玉阁
- 璃月核弹
地标:
洞口:
- 洞口
-
浪船锚点:
- 浪船锚点
- 船点
- 浪船点
忍冬之树:
- 忍冬之树
- 冬树
- 雪山树
神樱:
- 神樱
- 稻妻树
- 神樱树
梦之树:
- 梦之树
- 须弥树
露天宝箱:
普通的宝箱:
- 普通的宝箱
- 普通宝箱
精致的宝箱:
- 精致的宝箱
- 精致宝箱
珍贵的宝箱:
- 珍贵的宝箱
- 珍贵宝箱
华丽的宝箱:
- 华丽的宝箱
- 华丽宝箱
奇馈宝箱:
- 奇馈宝箱
- 奇馈的宝箱
解谜宝箱:
指引仙灵:
- 指引仙灵
温暧仙灵:
- 温暧仙灵
限时挑战:
- 限时挑战
风车机关:
- 风车机关
- 大风机关
压力机关:
- 压力机关
元素方碑:
- 元素方碑
- 元素碑
火炬机关:
- 火炬机关
巨型碎石:
- 巨型碎石
- 巨石
小石堆:
- 小石堆
拔植物:
- 拔植物
雷灵:
- 雷灵
- 雷仙灵
漂浮的风史莱姆:
- 漂浮的风史莱姆
- 风史莱姆
蓬蓬果:
- 蓬蓬果
- 飞天果
微解谜:
- 微解谜
- 小解谜
雷霆探针:
- 雷霆探针
- 雷针
狂风屏障:
- 狂风屏障
- 风屏障
机关立方:
- 机关立方
挖掘宝箱:
- 挖掘宝箱
- 挖掘箱
被束缚的宝箱:
- 被束缚的宝箱
- 束缚箱
电气传导:
- 电气传导
- 电气石
连线石板:
- 连线石板
- 连线板
首杀敌人:
- 首杀敌人
- 首杀怪
- 首杀怪物
- 首杀
奇特的岩石:
- 奇特的岩石
野外的苗圃:
- 野外的苗圃
桑格吉拉光机:
- 桑格吉拉光机
石柱的封印:
- 石柱的封印
三乘种子:
- 三乘种子
- 会飞的草种子
- 毛球种子
须弥解谜:
- 须弥解谜
死域:
- 死域
幻梦之门:
- 幻梦之门
元能尖碑:
- 元能尖碑
幻影壁画:
- 幻影壁画
恒光元件:
- 恒光元件
元能火种:
- 元能火种
元能沙钟:
- 元能沙钟
- 倒计时
- 元能沙漏
区域特产:
落落莓:
- 落落莓
- 丽莎突破材料
- 诺艾尔突破材料
- 女仆突破材料
- 罗莎莉亚突破材料
- 修女突破材料
绝云椒椒:
- 绝云椒椒
- 辣椒
- 香菱突破材料
嘟嘟莲:
- 嘟嘟莲
- 凯亚突破材料
- 凯子哥突破材料
- 迪奥娜突破材料
- dio娜破材料
清心:
- 清心
- 甘雨突破材料
- 椰羊突破材料
- 申鹤突破材料
- 魈突破材料
小灯草:
- 小灯草
- 迪卢克突破材料
- 姥爷突破材料
- 老爷突破材料
- 安柏突破材料
- 菲谢尔突破材料
- 皇女突破材料
琉璃袋:
- 琉璃袋
- 七七突破材料
- 小僵尸突破材料
- 僵尸突破材料
- 辛焱突破材料
塞西莉亚花:
- 塞西莉亚花
- 温迪突破材料
- 卖唱的突破材料
- 阿贝多突破材料
- 阿贝少突破材料
- 阿贝夕突破材料
- 阿贝花突破材料
霓裳花:
- 霓裳花
- 胡桃突破材料
- 圣人突破材料
- 行秋突破材料
蒲公英籽:
- 蒲公英籽
- 优菈突破材料
- 琴突破材料
- 琴团长突破材料
琉璃百合:
- 琉璃百合
- 凝光突破材料
- 富婆突破材料
- 云堇突破材料
- 云先生突破材料
慕风蘑菇:
- 慕风蘑菇
- 莫娜突破材料
- 可莉突破材料
- 芭芭拉突破材料
- 内鬼突破材料
石珀:
- 石珀
- 钟离突破材料
- 帝君突破材料
- 老爷子突破材料
- 岩王爷突破材料
- 刻晴突破材料
- 阿晴突破材料
- 重云突破材料
钩钩果:
- 钩钩果
- 雷泽突破材料
夜泊石:
- 夜泊石
- 北斗突破材料
- 烟绯突破材料
- 律师突破材料
风车菊:
- 风车菊
- 旅行者突破材料
- 爷突破材料
- 空突破材料
- 荧突破材料
- 空哥突破材料
- 荧妹突破材料
- 钟班尼特突破材料
- 砂糖突破材料
星螺:
- 星螺
- 夜兰突破材料
- 夜阑突破材料
- 达达利亚突破材料
- 达达鸭突破材料
- 公子突破材料
- 鸭鸭突破材料
海灵芝:
- 海灵芝
- 八重神子突破材料
- 神子突破材料
- 八重突破材料
- 枫原万叶突破材料
- 万叶突破材料
鬼兜虫:
- 鬼兜虫
- 荒泷一斗突破材料
- 一斗突破材料
- 鹿野院平藏突破材料
- 平藏突破材料
- 小鹿突破材料
鸣草:
- 鸣草
- 宵宫突破材料
- 久岐忍突破材料
- 97忍突破材料
血斛:
- 血斛
- 九条裟罗突破材料
- 九条突破材料
- 裟罗突破材料
绯樱绣球:
- 绯樱绣球
- 神里绫人突破材料
- 绫人突破材料
- 神里绫华突破材料
- 绫华突破材料
晶化骨髓:
- 晶化骨髓
- 埃洛伊突破材料
- 早柚突破材料
珊瑚真珠:
- 珊瑚真珠
- 珊瑚宫心海突破材料
- 心海突破材料
- 五郎突破材料
- 希娜小姐突破材料
- 希娜突破材料
天云草实:
- 天云草实
- 雷电将军突破材料
- 雷电影突破材料
- 将军突破材料
- 影突破材料
幽灯蕈:
- 幽灯蕈
- 托马突破材料
月莲:
- 月莲
- 提纳里突破材料
- 提那里突破材料
- 提这里突破材料
劫波莲:
- 劫波莲
- 多莉突破材料
树王圣体菇:
- 树王圣体菇
- 科莱突破材料
帕蒂沙兰:
- 帕蒂沙兰
- 妮露突破材料
圣金虫:
- 圣金虫
- 赛诺突破材料
赤念果:
- 赤念果
- 坎蒂丝突破材料
- 凯蒂丝突破材料
神瞳:
风神瞳:
- 风神瞳
岩神瞳:
- 岩神瞳
绯红玉髓:
- 绯红玉髓
- 玉髓
雷神瞳:
- 雷神瞳
键纹Ⅱ:
- 键纹Ⅱ
- 键纹2
键纹Ⅲ:
- 键纹Ⅲ
- 键纹3
键纹IV:
- 键纹IV
- 键纹4
草神瞳:
- 草神瞳
圣章石:
- 圣章石
敌人(普通):
丘丘人:
- 丘丘人
丘丘萨满:
- 丘丘萨满
盗宝团:
- 盗宝团
丘丘射手:
- 丘丘射手
史莱姆:
- 史莱姆
野伏众:
- 野伏众
- 野人众
飘浮灵:
- 飘浮灵
- 怨种灵
愚人众先遣队:
- 愚人众先遣队
- 先遣队
骗骗花:
- 骗骗花
蕈兽:
- 蕈兽
- 笨蛋兽
镀金旅团:
- 镀金旅团
敌人(精英):
丘丘暴徒:
- 丘丘暴徒
深渊法师:
- 深渊法师
愚人众·债务处理人:
- 愚人众·债务处理人
- 债务处理人
- 讨债的
愚人众·萤术士:
- 愚人众·萤术士
- 萤术士
遗迹机兵:
- 遗迹机兵
遗迹重机:
- 遗迹重机
遗迹守卫:
- 遗迹守卫
- 独眼小宝
遗迹猎者:
- 遗迹猎者
幼岩龙蜥:
- 幼岩龙蜥
岩龙蜥:
- 岩龙蜥
丘丘王:
- 丘丘王
大雪猪王:
- 大雪猪王
- 雪猪王
狂风之核:
- 狂风之核
藏镜仕女:
- 藏镜仕女
- 藏镜
- 仕女
兽境之狼:
- 兽境之狼
- 流血狗
遗迹龙兽:
- 遗迹龙兽
- 机甲暴龙兽
元能构装体:
- 元能构装体
敌人(BOSS):
无相之风:
- 无相之风
- 无相风
急冻树:
- 急冻树
- 冰树
北风的王狼,奔狼的领主:
- 北风的王狼
- 奔狼的领主
- 北风的王狼
- 狼王
- 奔狼的领主
无相之雷:
- 无相之雷
- 无相雷
纯水精灵:
- 纯水精灵
- 纯水
爆炎树:
- 爆炎树
- 火树
无相之岩:
- 无相之岩
- 无相岩
古岩龙蜥:
- 古岩龙蜥
无相之冰:
- 无相之冰
- 无相冰
魔偶剑鬼:
- 魔偶剑鬼
- 魔偶
- 剑鬼
无相之火:
- 无相之火
- 无相火
- 无相之耻
- 无相耻
恒常机关列阵:
- 恒常机关列阵
- 恒常机关
无相之水:
- 无相之水
- 无相水
雷音权现:
- 雷音权现
- 雷鸟
黄金王兽:
- 黄金王兽
掣电树:
- 掣电树
- 雷树
翠翎恐蕈:
- 翠翎恐蕈
- 鸡哥
兆载永劫龙兽:
- 兆载永劫龙兽
- 永劫龙兽
半永恒统辖距阵:
- 半永恒统辖距阵
- 永恒距阵
- 矩阵
兰那罗:
兰那罗1:
- 兰那罗1
- 兰那罗
兰那罗2:
- 兰那罗2
垂钓:
垂钓点:
- 垂钓点
- 钓鱼点
花鳉:
- 花鳉
琉璃花鳉:
- 琉璃花鳉
甜甜花鳉:
- 甜甜花鳉
蓝染花鳉:
- 蓝染花鳉
擒霞客:
- 擒霞客
水晶宴:
- 水晶宴
肺棘鱼:
- 肺棘鱼
斗棘鱼:
- 斗棘鱼
鸩棘鱼:
- 鸩棘鱼
赤魔王:
- 赤魔王
雪中君:
- 雪中君
金赤假龙:
- 金赤假龙
铸假龙:
- 铸假龙
流纹褐蝶鱼:
- 流纹褐蝶鱼
- 褐蝶鱼
流纹京紫蝶鱼:
- 流纹京紫蝶鱼
- 京紫蝶鱼
流纹茶蝶鱼:
- 流纹茶蝶鱼
- 茶蝶鱼
长生仙:
- 长生仙
雷鸣仙:
- 雷鸣仙
炮鲀:
- 炮鲀
苦炮鲀:
- 苦炮鲀
真果角鲀:
- 真果角鲀
沉波蛮桃:
- 沉波蛮桃
吹沙角鲀:
- 吹沙角鲀
暮云角鲀:
- 暮云角鲀
青金斧枪鱼:
- 青金斧枪鱼
翡玉斧枪鱼:
- 翡玉斧枪鱼
材料:
冰雾花花朵:
- 冰雾花花朵
- 冰雾花
烈焰花花蕊:
- 烈焰花花蕊
- 烈焰花
电气水晶:
- 电气水晶
竹笋:
- 竹笋
-
鳅鳅宝玉:
- 鳅鳅宝玉
晶核:
- 晶核
蝴蝶:
- 蝴蝶
- 蛾子
- 扑棱蛾子
金鱼草:
- 金鱼草
马尾:
- 马尾
青蛙:
- 青蛙
蜥蜴尾巴:
- 蜥蜴尾巴
螃蟹:
- 螃蟹
兽肉:
- 兽肉
鱼肉:
- 鱼肉
禽肉:
- 禽肉
松茸:
- 松茸
松果:
- 松果
乌蛋:
- 乌蛋
奇异的「牙齿」:
- 奇异的「牙齿」
- 奇异的牙齿
- 牙齿
「冷鲜肉」:
- 「冷鲜肉」
- 冷鲜肉
- 冰冻肉
甜甜花:
- 甜甜花
薄荷:
- 薄荷
蘑菇:
- 蘑菇
树莓:
- 树莓
日落果:
- 日落果
苹果:
- 苹果
莲蓬:
- 莲蓬
胡萝卜:
- 胡萝卜
白萝卜:
- 白萝卜
发光髓:
- 发光髓
堇瓜:
- 堇瓜
海草:
- 海草
鳗肉:
- 鳗肉
星蕈:
- 星蕈
旋曜玉帛:
- 旋曜玉帛
- 玉帛
老石:
- 老石
须弥蔷薇:
- 须弥蔷薇
墩墩桃:
- 墩墩桃
香辛果:
- 香辛果
毗波耶:
- 毗波耶
枣椰:
- 枣椰
动物:
白鸽:
- 白鸽
薄红蟹:
- 薄红蟹
碧团雀:
- 碧团雀
冰晶蝶:
- 冰晶蝶
赤鳍陆鳗鳗:
- 赤鳍陆鳗鳗
赤团雀:
- 赤团雀
赤胁鸽:
- 赤胁鸽
风晶蝶:
- 风晶蝶
海蓝蟹:
- 海蓝蟹
黑王鸽:
- 黑王鸽
红狐:
- 红狐
红角蜥:
- 红角蜥
红尾鼬:
- 红尾鼬
狐:
-
黄金蟹:
- 黄金蟹
灰雪猫:
- 灰雪猫
灰羽鸽:
- 灰羽鸽
将军蟹:
- 将军蟹
金鳅鳅:
- 金鳅鳅
金团雀:
- 金团雀
菫鹮:
- 菫鹮
蓝宝石:
- 蓝宝石
蓝角蜥:
- 蓝角蜥
蓝蛙:
- 蓝蛙
雷晶蝶:
- 雷晶蝶
璃冠鸽:
- 璃冠鸽
落日鳅鳅:
- 落日鳅鳅
绿角蜥:
- 绿角蜥
泥蛙:
- 泥蛙
青蛙:
- 青蛙
晴天鳅鳅:
- 晴天鳅鳅
嗜髓蜥:
- 嗜髓蜥
松鼠:
- 松鼠
太阳蟹:
- 太阳蟹
藤纹陆鳗鳗:
- 藤纹陆鳗鳗
靴子鼬:
- 靴子鼬
雪狐:
- 雪狐
雪团雀:
- 雪团雀
雪隐鼬:
- 雪隐鼬
雪猪:
- 雪猪
鸦:
-
岩晶蝶:
- 岩晶蝶
蕈猪:
- 蕈猪
草晶蝶:
- 草晶蝶
瞑彩鸟:
- 瞑彩鸟
沙狐:
- 沙狐
流沙鳗鳗:
- 流沙鳗鳗
赤尾蜥:
- 赤尾蜥
面具鼬:
- 面具鼬
地灵龛:
蒙德地灵龛:
- 蒙德地灵龛
璃月地灵龛:
- 璃月地灵龛
稻妻地灵龛:
- 稻妻地灵龛
须弥地灵龛:
- 须弥地灵龛
世界任务:
世界任务:
- 世界任务
解谜:
岩种子:
- 岩种子
古代坚冰:
- 古代坚冰
8个石碑:
- 8个石碑
3个宝匣:
- 3个宝匣
剑柄:
- 剑柄
水泡:
- 水泡
- 泡泡
妖狸:
- 妖狸
封锁点Ⅱ:
- 封锁点Ⅱ
- 封锁点2
封锁点Ⅲ:
- 封锁点Ⅲ
- 封锁点3
封锁点IV:
- 封锁点IV
- 封锁点4
琥珀:
- 琥珀
指引:
雷种子:
- 雷种子
相位之门:
- 相位之门
- 传送门
雷石:
- 雷石
神秘的刻像:
- 神秘的刻像
- 神秘刻像
- 神秘的狐狸雕像
- 神秘的狐狸像
锅:
-
- 做饭的
篝火/火把:
- 篝火/火把
- 篝火
- 火把
遗迹之蚀:
- 遗迹之蚀
仙灵之庭:
- 仙灵之庭
- 仙灵的家
- 仙灵柱子
草种子:
- 草种子
弹弹菇:
- 弹弹菇
- 弹跳菇
众叶觉蕊:
- 众叶觉蕊
草石头:
- 草石头
草桩:
- 草桩
矿物:
白铁块:
- 白铁块
- 白铁矿
水晶块:
- 水晶块
- 水晶矿
魔晶块:
- 魔晶块
- 魔晶矿
星银矿石:
- 星银矿石
- 星银矿
深赤之石:
- 深赤之石
- 红石
铁块:
- 铁块
- 铁矿
紫晶块:
- 紫晶块
- 紫晶矿
敌人(彩蛋):
大伟丘:
- 大伟丘
- 大伟哥
地理志:
观景点:
- 观景点
- 景点
书籍/食谱:
书籍:
- 书籍
-
食谱:
- 食谱
调查:
圣遗物:
- 圣遗物
- 调查圣遗物
- 狗粮
摩拉:
- 摩拉
- 摩拉箱
- 摩拉石堆
-
岩之印:
- 岩之印
木匣:
- 木匣
- 木匣子
食材:
- 食材
武器:
- 武器
矿物:
- 矿物
石堆:
- 石堆
沙堆:
- 沙堆
NPC:
商人:
- 商人
- 卖东西的
鲸井小弟:
- 鲸井小弟
- 捉迷藏小弟
- 阴间小弟
丹迪:
- 丹迪
幻影:
- 幻影
- 幽灵
- 鬼影
木头:
杉木:
- 杉木
松木:
- 松木
竹节:
- 竹节
却砂木:
- 却砂木
桦木:
- 桦木
萃华木:
- 萃华木
垂香木:
- 垂香木
御伽木:
- 御伽木
枫木:
- 枫木
孔雀木:
- 孔雀木
梦见木:
- 梦见木
证悟木:
- 证悟木
辉木:
- 辉木
业果木:
- 业果木
刺葵木:
- 刺葵木
柽木:
- 柽木

View File

@ -26,6 +26,7 @@ class GsCfg {
}
/** 通用yaml读取*/
getfileYaml(path, name) {
this.cpCfg('config', 'config')
return YAML.parse(
fs.readFileSync(path + name + ".yaml", 'utf8')
)
@ -80,6 +81,43 @@ class GsCfg {
ckQQ
}
}
/** 读取所有用户绑定的ck */
async getBingAllCk () {
let ck = {}
let ckQQ = {}
let qqCk={}
let dir = './data/MysCookie/'
let files = fs.readdirSync(dir).filter(file => file.endsWith('.yaml'))
const readFile = promisify(fs.readFile)
let promises = []
files.forEach((v) => promises.push(readFile(`${dir}${v}`, 'utf8')))
const res = await Promise.all(promises)
res.forEach((v) => {
let tmp = YAML.parse(v)
let qq
lodash.forEach(tmp, (item, uid) => {
qq = item.qq
ck[String(uid)] = item
if(!qqCk[String(item.qq)]) qqCk[String(item.qq)]=[]
qqCk[String(item.qq)].push(item)
if (item.isMain && !ckQQ[String(item.qq)]) {
ckQQ[String(item.qq)] = item
}
})
if (qq && !ckQQ[String(qq)]) {
ckQQ[String(qq)] = Object.values(tmp)[0]
}
})
return { ck, ckQQ,qqCk }
}
async getUserStoken(userId){
try {
let ck=YAML.parse(

91
model/note.js Normal file
View File

@ -0,0 +1,91 @@
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 gsCfg from './gsCfg.js'
const plugin = 'xiaoyao-cvs-plugin'
/** 配置文件 */
export default class note {
constructor(e) {
if(e){
this.e = e
}
this.Cfg = `./plugins/${plugin}/config/`
gsCfg.cpCfg("config", "note")
this.noteCfg = gsCfg.getfileYaml(this.Cfg, "note") || {}
this.cfg = gsCfg.getfileYaml(`./plugins/xiaoyao-cvs-plugin/config/`, "config");
}
addNote() {
if (!this.noteCfg[this.e.group_id]) {
this.noteCfg[this.e.group_id] = {
"task": [],
"isTask": true,
"sendResin": 120
}
}
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() {
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() {
if (!this.noteCfg[this.e.group_id]["isTask"]) {
this.e.reply("群体力推送关闭了~\n请联系管理员开启功能~")
return false;
}
return true;
}
}

View File

@ -192,7 +192,7 @@ export default class user {
}
}
async docHelp(type) {
return this.configSign[type.includes("云") ? "yunDoc" : "cookiesDoc"]
return this.configSign[type.includes("云") ? "cloudDoc" : "cookiesDoc"]
}
async cloudSign() {
let res = await this.getData("cloudReward")
@ -463,7 +463,7 @@ export default class user {
let mul = e;
Bot.logger.mark(`云原神签到任务开始`);
let files = fs.readdirSync(this.yunPath).filter(file => file.endsWith('.yaml'))
let isYunSignMsg = this.configSign.isYunSignMsg
let Msg = this.configSign.isCloudSignMsg
let userIdList = (files.join(",").replace(/.yaml/g, "").split(","))
if (cloudTask) {
e.reply(`云原神自动签到任务进行中,请勿重复触发指令`)

View File

@ -3,10 +3,10 @@
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link rel="shortcut icon" href="#" />
<link rel="stylesheet" type="text/css" href="{{_res_path}}dailyNote/Template/{{urlType}}/css/xiaoyao_Note.css?v=1.0" />
<link rel="stylesheet" type="text/css" href="{{_res_path}}{{urlType}}/css/xiaoyao_Note.css?v=1.0" />
</head>
<body>
<div class="container" id="container" style=" background-image: url({{_res_path}}/dailyNote/Template/{{urlType}}/icon/bg/{{imgs}});">
<div class="container" id="container" style=" background-image: url({{_res_path}}{{urlType}}/icon/bg/{{imgs}});">
<div class="left_model">
<div class="list">
<div class="div">
@ -107,7 +107,7 @@
</div>
</div> -->
<div class="jdt">
<img src="{{_res_path}}/dailyNote/Template/{{urlType}}/speed/{{100-list.percentage}}.png"/>
<img src="{{_res_path}}{{urlType}}/speed/{{100-list.percentage}}.png"/>
</div>
<div class="icon {{list.mb2_icon==''?'user_null':''}}" >
{{if list.mb2_icon==''}}