mirror of
https://github.com/shanmiteko/LotteryAutoScript.git
synced 2026-07-22 21:13:47 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77245c0391 | ||
|
|
c0dbdee343 | ||
|
|
a0a2502148 | ||
|
|
41b036966e | ||
|
|
c282d8492d | ||
|
|
5a3c16d20d |
@@ -49,7 +49,6 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
with:
|
||||
file: "dist/*.zip"
|
||||
delete_file: "dist/*.zip"
|
||||
tag_name: "v2"
|
||||
overwrite: true
|
||||
arm64:
|
||||
@@ -78,6 +77,5 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
with:
|
||||
file: "dist/*.zip"
|
||||
delete_file: "dist/*.zip"
|
||||
tag_name: "v2"
|
||||
overwrite: true
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<!-- markdownlint-disable MD036 MD024-->
|
||||
# CHANGELOG
|
||||
## 主要变化(2.7.11)
|
||||
* 5a3c16d fix: 专栏获取内容不正确,需要排除推荐内容 (#293)
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](https://github.com/shanmiteko/LotteryAutoScript/blob/main/CHANGELOG.md)变更说明_
|
||||
|
||||
## 主要变化(2.7.10)
|
||||
* 29645bc fixed: 话题搜索功能已失效 #285
|
||||
* d950a59 fix: is_imitator导致错误评论
|
||||
|
||||
@@ -7,6 +7,10 @@ module.exports = Object.freeze({
|
||||
* - `CLEAR` 是否启用清理功能
|
||||
* - `ENABLE_MULTIPLE_ACCOUNT` 是否启用多账号
|
||||
* - `MULTIPLE_ACCOUNT_PARM` 多账号参数(JSON格式)
|
||||
* ## 代理相关
|
||||
* - `ENABLE_PROXY` 启用代理
|
||||
* - `XMDL_ORDERNNO` 熊猫动态代理订单号
|
||||
* - `XMDL_SECRET` 熊猫动态代理密钥
|
||||
* ## 调试相关
|
||||
* - `LOTTERY_LOG_LEVEL` 输出日志等级 Error<Warn<Info<Debug 1<2<3<4
|
||||
* - `NOT_GO_LOTTERY` 关闭抽奖行为
|
||||
@@ -25,6 +29,10 @@ module.exports = Object.freeze({
|
||||
|
||||
ENABLE_MULTIPLE_ACCOUNT: false,
|
||||
|
||||
ENABLE_PROXY: "",
|
||||
XMDL_ORDERNNO: "",
|
||||
XMDL_SECRET: "",
|
||||
|
||||
MULTIPLE_ACCOUNT_PARM: "",
|
||||
LOTTERY_LOG_LEVEL: 3,
|
||||
NOT_GO_LOTTERY: ""
|
||||
|
||||
@@ -432,7 +432,7 @@ class Searcher {
|
||||
continue
|
||||
}
|
||||
const
|
||||
content = await bili.getOneArticleByCv(id),
|
||||
content = (await bili.getOneArticleByCv(id) || "").split("推荐文章")[0],
|
||||
dyids = content.match(/[0-9]{18}/g) || [],
|
||||
short_ids = content.match(/(?<=b23.tv\/)[a-zA-Z0-9]{7}/g) || [],
|
||||
short_id_set = [...new Set(short_ids)],
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
const { log } = require('../utils');
|
||||
const crypto = require('crypto');
|
||||
|
||||
/**
|
||||
* [熊猫代理](http://www.xiongmaodaili.com)
|
||||
* @returns {import("../net/http").ProxyConfig}
|
||||
*/
|
||||
function xiongmaodaili() {
|
||||
log.info("熊猫代理", "开始")
|
||||
let timestamp = parseInt(new Date().getTime() / 1000);
|
||||
let orderno = process.env["XMDL_ORDERNNO"];
|
||||
let secret = process.env["XMDL_SECRET"];
|
||||
|
||||
let txt = 'orderno=' + orderno + ',secret=' + secret + ',timestamp=' + timestamp;
|
||||
let md5 = crypto.createHash('md5');
|
||||
let sign = md5.update(txt).digest('hex').toUpperCase();
|
||||
|
||||
return {
|
||||
url: "http://dtan.xiongmaodaili.com:8088",
|
||||
auth_headers: [
|
||||
["Proxy-Authorization", 'sign=' + sign + '&orderno=' + orderno + "×tamp=" + timestamp]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { xiongmaodaili }
|
||||
+14
-5
@@ -1,7 +1,8 @@
|
||||
const GlobalVar = require('../data/global_var');
|
||||
const { strToJson, log } = require('../utils');
|
||||
const { strToJson, log, hasEnv } = require('../utils');
|
||||
const { send } = require('./http');
|
||||
const API = require('./api.bili');
|
||||
const proxies = require("../helper/proxies");
|
||||
|
||||
class Line {
|
||||
/**
|
||||
@@ -88,7 +89,7 @@ class Line {
|
||||
*/
|
||||
function get({ url, config, contents, query }) {
|
||||
return new Promise((resolve) => {
|
||||
send({
|
||||
let ro = {
|
||||
url,
|
||||
method: 'GET',
|
||||
config,
|
||||
@@ -100,7 +101,11 @@ function get({ url, config, contents, query }) {
|
||||
contents,
|
||||
success: res => resolve(res.body),
|
||||
failure: err => resolve(err)
|
||||
})
|
||||
}
|
||||
if (hasEnv("ENABLE_PROXY")) {
|
||||
ro.proxy = proxies.xiongmaodaili();
|
||||
}
|
||||
send(ro)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -111,7 +116,7 @@ function get({ url, config, contents, query }) {
|
||||
*/
|
||||
function post({ url, config, contents, query }) {
|
||||
return new Promise((resolve) => {
|
||||
send({
|
||||
let ro = {
|
||||
url,
|
||||
method: 'POST',
|
||||
config,
|
||||
@@ -124,7 +129,11 @@ function post({ url, config, contents, query }) {
|
||||
contents,
|
||||
success: res => resolve(res.body),
|
||||
failure: err => resolve(err)
|
||||
})
|
||||
};
|
||||
if (hasEnv("ENABLE_PROXY")) {
|
||||
ro.proxy = proxies.xiongmaodaili();
|
||||
}
|
||||
send(ro)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+18
-5
@@ -20,12 +20,16 @@
|
||||
* @property {boolean} [redirect] 是否重定向
|
||||
* @property {number} [retry_times] 重试次数
|
||||
*
|
||||
* @typedef ProxyConfig
|
||||
* @property {string} url https?://{IP}:{PORT}
|
||||
* @property {[[string, string]]} auth_headers [[k,v],[k,v]]
|
||||
*
|
||||
* @typedef {object} RequestOptions Http请求选项
|
||||
* @property {string} [method] 请求方法
|
||||
* @property {string} url 完整链接
|
||||
* @property {boolean} [stream] 是否流式数据
|
||||
* @property {RequestConfig} [config] 设置
|
||||
* @property {string} [proxy] HTTP代理 IP:PORT
|
||||
* @property {ProxyConfig} [proxy] HTTP代理 IP:PORT
|
||||
* @property {Object.<string, string|number>} [query] 查询选项
|
||||
* @property {Object.<string, string|number> | string} [contents] 内容
|
||||
* @property {HttpHeaders} [headers] 请求头
|
||||
@@ -34,7 +38,9 @@
|
||||
*/
|
||||
|
||||
const { request: http_request } = require('http');
|
||||
const { HttpProxyAgent } = require('http-proxy-agent');
|
||||
const { request: https_request } = require('https');
|
||||
const { HttpsProxyAgent } = require('https-proxy-agent');
|
||||
const { stringify } = require('querystring');
|
||||
|
||||
/**默认编码 */
|
||||
@@ -64,7 +70,10 @@ function send(detail) {
|
||||
const { timeout, wait, retry, redirect, retry_times } = config;
|
||||
const thisURL = new URL(url)
|
||||
, content = formatContents(headers["content-type"], contents)
|
||||
, request = (thisURL.protocol === 'https:') && !proxy ? https_request : http_request;
|
||||
, request = (thisURL.protocol === 'https:') ? https_request : http_request;
|
||||
/**
|
||||
* @type {import("https").RequestOptions}
|
||||
*/
|
||||
let options = {
|
||||
timeout,
|
||||
method: method.toUpperCase(),
|
||||
@@ -80,9 +89,13 @@ function send(detail) {
|
||||
options.headers['content-length'] = Buffer.byteLength(content, 'utf-8').toString();
|
||||
}
|
||||
if (proxy) {
|
||||
options.headers.host = thisURL.host;
|
||||
options.path = thisURL.href;
|
||||
[options.host, options.port] = proxy.split(':');
|
||||
options.agent = (thisURL.protocol === 'https:')
|
||||
? new HttpsProxyAgent(proxy.url)
|
||||
: new HttpProxyAgent(proxy.url);
|
||||
for (const ah of proxy.auth_headers) {
|
||||
options.headers[ah[0]] = ah[1]
|
||||
}
|
||||
options.rejectUnauthorized = false
|
||||
}
|
||||
const req = request(options, res => {
|
||||
let protodata = '';
|
||||
|
||||
+3
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lottery-auto-script",
|
||||
"version": "2.7.10",
|
||||
"version": "2.7.11",
|
||||
"description": "自动参与B站动态抽奖",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -42,6 +42,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^4.1.2",
|
||||
"http-proxy-agent": "^7.0.0",
|
||||
"https-proxy-agent": "^7.0.0",
|
||||
"nodemailer": "^6.7.0"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ const { parseDynamicCard } = require('../lib/core/searcher');
|
||||
(async () => {
|
||||
assert(await bili_client.getMyinfo());
|
||||
|
||||
await util.par_run([0, 1, 2, 3, 4, 6], [
|
||||
await util.par_run([0, 1, 2, 3, 4, 5], [
|
||||
// 0
|
||||
async () => {
|
||||
assert.equal((await bili_client.getTopRcmd()).length, 10)
|
||||
|
||||
@@ -7,6 +7,7 @@ log._level = 2
|
||||
env.init()
|
||||
global_var.init(process.env["COOKIE"], 1)
|
||||
|
||||
|
||||
fs.readdirSync(module.path)
|
||||
.filter(file => file.endsWith(".test.js"))
|
||||
.forEach(file => require(`${module.path}/${file}`))
|
||||
@@ -0,0 +1,38 @@
|
||||
const util = require('./util');
|
||||
const crypto = require('crypto');
|
||||
const { send } = require('../lib/net/http');
|
||||
|
||||
(async () => {
|
||||
await util.par_run([], [
|
||||
// 0
|
||||
async () => {
|
||||
let timestamp = parseInt(new Date().getTime() / 1000);
|
||||
let orderno = process.env["XMDL_ORDERNNO"];
|
||||
let secret = process.env["XMDL_SECRET"];
|
||||
|
||||
if (orderno && secret) {
|
||||
let txt = 'orderno=' + orderno + ',secret=' + secret + ',timestamp=' + timestamp;
|
||||
let md5 = crypto.createHash('md5');
|
||||
let sign = md5.update(txt).digest('hex').toUpperCase();
|
||||
|
||||
console.log(await new Promise((resolve) => {
|
||||
send({
|
||||
url: "https://api.bilibili.com/client_info",
|
||||
proxy: {
|
||||
url: "http://dtan.xiongmaodaili.com:8088",
|
||||
auth_headers: [
|
||||
["Proxy-Authorization", 'sign=' + sign + '&orderno=' + orderno + "×tamp=" + timestamp]
|
||||
]
|
||||
},
|
||||
config: {
|
||||
retry: false
|
||||
},
|
||||
success: (res) => { resolve(JSON.parse(res.body)) },
|
||||
failure: resolve
|
||||
})
|
||||
}));
|
||||
console.log("proxy.test ... ok!");
|
||||
}
|
||||
},
|
||||
])
|
||||
})()
|
||||
Reference in New Issue
Block a user