mirror of https://github.com/KingRan/KR.git
271 lines
7.9 KiB
JavaScript
271 lines
7.9 KiB
JavaScript
|
let request = require('request');
|
|||
|
let CryptoJS = require('crypto-js');
|
|||
|
let qs = require('querystring');
|
|||
|
let urls = require('url');
|
|||
|
let path = require('path');
|
|||
|
let notify = require('./sendNotify');
|
|||
|
let mainEval = require("./eval");
|
|||
|
let assert = require('assert');
|
|||
|
let jxAlgo = require("./jxAlgo");
|
|||
|
let config = require("./config");
|
|||
|
let user = {}
|
|||
|
try {
|
|||
|
user = require("./user")
|
|||
|
} catch (e) {}
|
|||
|
class env {
|
|||
|
constructor(name) {
|
|||
|
this.config = { ...config,
|
|||
|
...process.env,
|
|||
|
...user,
|
|||
|
};
|
|||
|
this.name = name;
|
|||
|
this.message = [];
|
|||
|
this.sharecode = [];
|
|||
|
this.code = [];
|
|||
|
this.timestamp = new Date().getTime();
|
|||
|
this.time = this.start = parseInt(this.timestamp / 1000);
|
|||
|
this.options = {
|
|||
|
'headers': {}
|
|||
|
};
|
|||
|
console.log(`\n🔔${this.name}, 开始!\n`)
|
|||
|
console.log(`=========== 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()} ===========\n`)
|
|||
|
}
|
|||
|
done() {
|
|||
|
let timestamp = new Date().getTime();
|
|||
|
let work = ((timestamp - this.timestamp) / 1000).toFixed(2)
|
|||
|
console.log(`=========================脚本执行完成,耗时${work}s============================\n`)
|
|||
|
console.log(`🔔${this.name}, 结束!\n`)
|
|||
|
}
|
|||
|
notify(array) {
|
|||
|
let text = '';
|
|||
|
for (let i of array) {
|
|||
|
text += `${i.user} -- ${i.msg}\n`
|
|||
|
}
|
|||
|
console.log(`\n=============================开始发送提醒消息=============================`)
|
|||
|
notify.sendNotify(this.name + "消息提醒", text)
|
|||
|
}
|
|||
|
wait(t) {
|
|||
|
return new Promise(e => setTimeout(e, t))
|
|||
|
}
|
|||
|
setOptions(params) {
|
|||
|
this.options = params;
|
|||
|
}
|
|||
|
setCookie(cookie) {
|
|||
|
this.options.headers.cookie = cookie
|
|||
|
}
|
|||
|
jsonParse(str) {
|
|||
|
try {
|
|||
|
return JSON.parse(str);
|
|||
|
} catch (e) {
|
|||
|
try {
|
|||
|
let data = this.match([/try\s*\{\w+\s*\(([^\)]+)/, /\w+\s*\(([^\)]+)/], str)
|
|||
|
return JSON.parse(data);
|
|||
|
} catch (ee) {
|
|||
|
try {
|
|||
|
let cb = this.match(/try\s*\{\s*(\w+)/, str)
|
|||
|
if (cb) {
|
|||
|
let func = "";
|
|||
|
let data = str.replace(cb, `func=`)
|
|||
|
eval(data);
|
|||
|
return func
|
|||
|
}
|
|||
|
} catch (eee) {
|
|||
|
return str
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
curl(params, extra = '') {
|
|||
|
if (typeof(params) != 'object') {
|
|||
|
params = {
|
|||
|
'url': params
|
|||
|
}
|
|||
|
}
|
|||
|
params = Object.assign({ ...this.options
|
|||
|
}, params);
|
|||
|
params.method = params.body ? 'POST' : 'GET';
|
|||
|
if (params.hasOwnProperty('cookie')) {
|
|||
|
params.headers.cookie = params.cookie
|
|||
|
}
|
|||
|
if (params.hasOwnProperty('ua') || params.hasOwnProperty('useragent')) {
|
|||
|
params.headers['user-agent'] = params.ua
|
|||
|
}
|
|||
|
if (params.hasOwnProperty('referer')) {
|
|||
|
params.headers.referer = params.referer
|
|||
|
}
|
|||
|
if (params.hasOwnProperty('params')) {
|
|||
|
params.url += '?' + qs.stringify(params.params)
|
|||
|
}
|
|||
|
if (params.hasOwnProperty('form')) {
|
|||
|
params.method = 'POST'
|
|||
|
}
|
|||
|
return new Promise(resolve => {
|
|||
|
request(params, async (err, resp, data) => {
|
|||
|
try {
|
|||
|
if (params.console) {
|
|||
|
console.log(data)
|
|||
|
}
|
|||
|
this.source = this.jsonParse(data);
|
|||
|
if (extra) {
|
|||
|
this[extra] = this.source
|
|||
|
}
|
|||
|
} catch (e) {
|
|||
|
console.log(e, resp)
|
|||
|
} finally {
|
|||
|
resolve(data);
|
|||
|
}
|
|||
|
})
|
|||
|
})
|
|||
|
}
|
|||
|
dumps(dict) {
|
|||
|
return JSON.stringify(dict)
|
|||
|
}
|
|||
|
loads(str) {
|
|||
|
return JSON.parse(str)
|
|||
|
}
|
|||
|
notice(msg) {
|
|||
|
this.message.push({
|
|||
|
'index': this.index,
|
|||
|
'user': this.user,
|
|||
|
'msg': msg
|
|||
|
})
|
|||
|
}
|
|||
|
notices(msg, user, index = '') {
|
|||
|
this.message.push({
|
|||
|
'user': user,
|
|||
|
'msg': msg,
|
|||
|
'index': index
|
|||
|
})
|
|||
|
}
|
|||
|
urlparse(url) {
|
|||
|
return urls.parse(url, true, true)
|
|||
|
}
|
|||
|
md5(encryptString) {
|
|||
|
return CryptoJS.MD5(encryptString).toString()
|
|||
|
}
|
|||
|
haskey(data, key, value) {
|
|||
|
value = typeof value !== 'undefined' ? value : '';
|
|||
|
var spl = key.split('.');
|
|||
|
for (var i of spl) {
|
|||
|
i = !isNaN(i) ? parseInt(i) : i;
|
|||
|
try {
|
|||
|
data = data[i];
|
|||
|
} catch (error) {
|
|||
|
return '';
|
|||
|
}
|
|||
|
}
|
|||
|
if (data == undefined) {
|
|||
|
return ''
|
|||
|
}
|
|||
|
if (value !== '') {
|
|||
|
return data === value ? true : false;
|
|||
|
} else {
|
|||
|
return data
|
|||
|
}
|
|||
|
}
|
|||
|
match(pattern, string) {
|
|||
|
pattern = (pattern instanceof Array) ? pattern : [pattern];
|
|||
|
for (let pat of pattern) {
|
|||
|
// var match = string.match(pat);
|
|||
|
var match = pat.exec(string)
|
|||
|
if (match) {
|
|||
|
var len = match.length;
|
|||
|
if (len == 1) {
|
|||
|
return match;
|
|||
|
} else if (len == 2) {
|
|||
|
return match[1];
|
|||
|
} else {
|
|||
|
var r = [];
|
|||
|
for (let i = 1; i < len; i++) {
|
|||
|
r.push(match[i])
|
|||
|
}
|
|||
|
return r;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
// console.log(pat.exec(string))
|
|||
|
}
|
|||
|
return '';
|
|||
|
}
|
|||
|
matchall(pattern, string) {
|
|||
|
pattern = (pattern instanceof Array) ? pattern : [pattern];
|
|||
|
var match;
|
|||
|
var result = [];
|
|||
|
for (var pat of pattern) {
|
|||
|
while ((match = pat.exec(string)) != null) {
|
|||
|
var len = match.length;
|
|||
|
if (len == 1) {
|
|||
|
result.push(match);
|
|||
|
} else if (len == 2) {
|
|||
|
result.push(match[1]);
|
|||
|
} else {
|
|||
|
var r = [];
|
|||
|
for (let i = 1; i < len; i++) {
|
|||
|
r.push(match[i])
|
|||
|
}
|
|||
|
result.push(r);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
compare(property) {
|
|||
|
return function(a, b) {
|
|||
|
var value1 = a[property];
|
|||
|
var value2 = b[property];
|
|||
|
return value1 - value2;
|
|||
|
}
|
|||
|
}
|
|||
|
filename(file, rename = '') {
|
|||
|
if (!this.runfile) {
|
|||
|
this.runfile = path.basename(file).replace(".js", '').replace(/-/g, '_')
|
|||
|
}
|
|||
|
if (rename) {
|
|||
|
rename = `_${rename}`;
|
|||
|
}
|
|||
|
return path.basename(file).replace(".js", rename).replace(/-/g, '_');
|
|||
|
}
|
|||
|
rand(n, m) {
|
|||
|
var random = Math.floor(Math.random() * (m - n + 1) + n);
|
|||
|
return random;
|
|||
|
}
|
|||
|
random(arr, num) {
|
|||
|
var temp_array = new Array();
|
|||
|
for (var index in arr) {
|
|||
|
temp_array.push(arr[index]);
|
|||
|
}
|
|||
|
var return_array = new Array();
|
|||
|
for (var i = 0; i < num; i++) {
|
|||
|
if (temp_array.length > 0) {
|
|||
|
var arrIndex = Math.floor(Math.random() * temp_array.length);
|
|||
|
return_array[i] = temp_array[arrIndex];
|
|||
|
temp_array.splice(arrIndex, 1);
|
|||
|
} else {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return return_array;
|
|||
|
}
|
|||
|
compact(lists, keys) {
|
|||
|
let array = {};
|
|||
|
for (let i of keys) {
|
|||
|
if (lists[i]) {
|
|||
|
array[i] = lists[i];
|
|||
|
}
|
|||
|
}
|
|||
|
return array;
|
|||
|
}
|
|||
|
unique(arr) {
|
|||
|
return Array.from(new Set(arr));
|
|||
|
}
|
|||
|
end(args) {
|
|||
|
return args[args.length - 1]
|
|||
|
}
|
|||
|
}
|
|||
|
module.exports = {
|
|||
|
env,
|
|||
|
eval: mainEval,
|
|||
|
assert,
|
|||
|
jxAlgo,
|
|||
|
}
|