mirror of
https://github.com/shanmiteko/LotteryAutoScript.git
synced 2026-07-22 21:13:47 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8dbe5ea5a | ||
|
|
47e09a1263 | ||
|
|
b91a4f979d | ||
|
|
d9cecbe163 | ||
|
|
989f836ba2 | ||
|
|
98948ad7f0 | ||
|
|
a363b4ee34 | ||
|
|
c220ff5d27 | ||
|
|
2b6cc8d602 | ||
|
|
856dd79ee9 | ||
|
|
468300227d |
@@ -37,7 +37,6 @@ jobs:
|
||||
node-version: "*"
|
||||
- name: "Pkg this"
|
||||
run: |
|
||||
npm install
|
||||
npm run pkg "node${{ matrix.nodev }}-${{ matrix.platform }}-x64"
|
||||
- name: "Upload to artifact"
|
||||
uses: actions/upload-artifact@v2
|
||||
@@ -55,14 +54,19 @@ jobs:
|
||||
overwrite: true
|
||||
arm64:
|
||||
runs-on: ubuntu-latest
|
||||
name: arm64
|
||||
name: node18-${{ matrix.platform }}-arm64
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- platform: linux
|
||||
- platform: linuxstatic
|
||||
- platform: alpine
|
||||
steps:
|
||||
- name: "Checkout codes"
|
||||
uses: actions/checkout@v2
|
||||
- name: "Pkg this"
|
||||
run: |
|
||||
sudo podman run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
npm run pkg arm
|
||||
npm run pkg "${{ matrix.platform }}-arm64"
|
||||
- name: "Upload to artifact"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
||||
@@ -2,9 +2,11 @@ node_modules/
|
||||
.vscode/
|
||||
tests/
|
||||
dyids/
|
||||
lottery_info/
|
||||
dist/
|
||||
.env
|
||||
*.log
|
||||
*.zip
|
||||
package-lock.json
|
||||
env.js
|
||||
my_config.js
|
||||
@@ -1,5 +1,22 @@
|
||||
<!-- markdownlint-disable MD036 MD024-->
|
||||
# CHANGELOG
|
||||
## 主要变化(2.6.5)
|
||||
* 47e09a1 ci: arm64 added, and optimized
|
||||
* b91a4f9 fix: `fs.rm` node12
|
||||
* d9cecbe ci: push shanmite/pkg-arm64
|
||||
* 989f836 ci: 修改github release镜像源
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](https://github.com/shanmiteko/LotteryAutoScript/blob/main/CHANGELOG.md)变更说明_
|
||||
|
||||
## 主要变化(2.6.4)
|
||||
* a363b4e ci: 关闭`arm64`自动打包
|
||||
* c220ff5 feat(多账号优化): 抽奖信息本地保存 (#209)
|
||||
* 2b6cc8d feat: 每条运行结果后面加上当前账号序列号 (#206)
|
||||
* 856dd79 fix: 增加获取关注上限(#207)
|
||||
* 4683002 fix: 青龙执行脚本时出错(#202)
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](https://github.com/shanmiteko/LotteryAutoScript/blob/main/CHANGELOG.md)变更说明_
|
||||
|
||||
## 主要变化(2.6.3)
|
||||
* ca1acd2 fix: 转发随机动态视频新的错误码(#201)
|
||||
* dabf8f9 fix: 关注出错(#199)
|
||||
|
||||
+16
-15
@@ -1,22 +1,23 @@
|
||||
FROM arm64v8/node
|
||||
FROM arm64v8/node:lts-alpine
|
||||
|
||||
WORKDIR /root/lottery
|
||||
|
||||
COPY . .
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
|
||||
apk add --no-cache curl
|
||||
|
||||
RUN npm config set registry https://registry.npm.taobao.org && npm i
|
||||
|
||||
ENV DOWNLOAD_HOST=https://download.fastgit.org \
|
||||
RELEASE_TAG=v3.4 \
|
||||
NODEV=18.5.0 \
|
||||
PKG_CACHE_PATH=/root/.pkg-cache \
|
||||
PKG_IGNORE_TAG=true
|
||||
ENV DOWNLOAD_HOST=https://ghproxy.com/https://github.com \
|
||||
RELEASE_TAG=v3.4 \
|
||||
NODEV=18.5.0 \
|
||||
PKG_CACHE_PATH=/root/.pkg-cache \
|
||||
PKG_IGNORE_TAG=true
|
||||
|
||||
RUN mkdir -p "${PKG_CACHE_PATH}" && \
|
||||
curl -L "$DOWNLOAD_HOST/vercel/pkg-fetch/releases/download/$RELEASE_TAG/node-v$NODEV-linux-arm64" -o \
|
||||
"${PKG_CACHE_PATH}/fetched-v$NODEV-linux-arm64" && \
|
||||
curl -L "$DOWNLOAD_HOST/vercel/pkg-fetch/releases/download/$RELEASE_TAG/node-v$NODEV-linuxstatic-arm64" -o \
|
||||
"${PKG_CACHE_PATH}/fetched-v$NODEV-linuxstatic-arm64"
|
||||
curl -L "$DOWNLOAD_HOST/vercel/pkg-fetch/releases/download/$RELEASE_TAG/node-v$NODEV-linux-arm64" -o \
|
||||
"${PKG_CACHE_PATH}/fetched-v$NODEV-linux-arm64" && \
|
||||
curl -L "$DOWNLOAD_HOST/vercel/pkg-fetch/releases/download/$RELEASE_TAG/node-v$NODEV-alpine-arm64" -o \
|
||||
"${PKG_CACHE_PATH}/fetched-v$NODEV-alpine-arm64" && \
|
||||
curl -L "$DOWNLOAD_HOST/vercel/pkg-fetch/releases/download/$RELEASE_TAG/node-v$NODEV-linuxstatic-arm64" -o \
|
||||
"${PKG_CACHE_PATH}/fetched-v$NODEV-linuxstatic-arm64"
|
||||
|
||||
CMD ["bash", "-c", "npx pkg -t node$NODEV-linuxstatic-arm64 -o dist/lottery-auto-script-node$NODEV-linuxstatic-arm64 . && \
|
||||
npx pkg -t node$NODEV-linux-arm64 -o dist/lottery-auto-script-node$NODEV-linux-arm64 ."]
|
||||
ENTRYPOINT ["npx", "pkg"]
|
||||
CMD [""]
|
||||
|
||||
+15
-6
@@ -32,12 +32,21 @@ module.exports = Object.freeze({
|
||||
|
||||
/**
|
||||
* 为防止环境变量过长, 请将多账号填在此处
|
||||
* 以大括号内容为模板依次复制(包含大括号),逗号分割
|
||||
* ```
|
||||
* ...
|
||||
* NUMBER: 1
|
||||
* ...
|
||||
* NUMBER: 2
|
||||
* 以 **大括号内容** 为模板依次复制(包含大括号),逗号分割
|
||||
*
|
||||
* ```txt
|
||||
* [
|
||||
* {
|
||||
* ...
|
||||
* NUMBER: 1
|
||||
* ...
|
||||
* },
|
||||
* {
|
||||
* ...
|
||||
* NUMBER: 2
|
||||
* ...
|
||||
* }
|
||||
* ]
|
||||
* ```
|
||||
*/
|
||||
multiple_account_parm: [
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ async function getFollowList() {
|
||||
log.info('获取关注列表', '未能成功获取关注分区id');
|
||||
return rmup
|
||||
}
|
||||
for (let index = 1; index < 42; index++) {
|
||||
for (let index = 1; index < 100; index++) {
|
||||
const uids = await bili.getPartitionUID(tagid, index);
|
||||
await delay(get_partition_wait);
|
||||
if (!uids.length) break;
|
||||
@@ -126,4 +126,4 @@ async function clear() {
|
||||
}
|
||||
|
||||
|
||||
module.exports = { clear }
|
||||
module.exports = { clear }
|
||||
|
||||
+9
-4
@@ -1,4 +1,4 @@
|
||||
const { log, hasEnv, shuffle, getRandomOne, delay, try_for_each, retryfn } = require('../utils');
|
||||
const { log, hasEnv, shuffle, getRandomOne, delay, try_for_each, retryfn, appendLotteryInfoFile } = require('../utils');
|
||||
const { send } = require('../net/http');
|
||||
const bili = require('../net/bili');
|
||||
const { sendNotify } = require('../helper/notify');
|
||||
@@ -256,7 +256,7 @@ class Monitor extends Searcher {
|
||||
/** 所有抽奖信息 */
|
||||
let alllotteryinfo = [];
|
||||
const
|
||||
{ check_if_duplicated, set_lottery_info_url, disable_reserve_lottery, reserve_lottery_wait, sneaktower, key_words, model, chatmodel, chat: chats, relay: relays, block_dynamic_type, max_create_time, is_imitator, only_followed, at_users, blockword, blacklist, use_public_blacklist } = config,
|
||||
{ check_if_duplicated, save_lottery_info_to_file, set_lottery_info_url, disable_reserve_lottery, reserve_lottery_wait, sneaktower, key_words, model, chatmodel, chat: chats, relay: relays, block_dynamic_type, max_create_time, is_imitator, only_followed, at_users, blockword, blacklist, use_public_blacklist } = config,
|
||||
now_ts = Date.now() / 1000;
|
||||
|
||||
/**
|
||||
@@ -287,9 +287,14 @@ class Monitor extends Searcher {
|
||||
log.info('筛选动态', `并发查询本地dyid完毕`);
|
||||
}
|
||||
|
||||
if (lottery_param[0] !== "APIs" && save_lottery_info_to_file && protoLotteryInfo.length) {
|
||||
log.info("保存抽奖信息", "保存开始")
|
||||
appendLotteryInfoFile(lottery_param[1].toString(), protoLotteryInfo)
|
||||
}
|
||||
|
||||
if (lottery_param[0] !== "APIs" && set_lottery_info_url && protoLotteryInfo.length) {
|
||||
log.info("上传抽奖信息", "开始")
|
||||
await new Promise((resolve) => {
|
||||
log.info("上传抽奖信息", "上传开始")
|
||||
new Promise((resolve) => {
|
||||
send({
|
||||
url: set_lottery_info_url,
|
||||
method: "POST",
|
||||
|
||||
+48
-44
@@ -478,64 +478,68 @@ class Searcher {
|
||||
if (api) {
|
||||
const { strToJson } = utils;
|
||||
log.info('获取动态', `开始获取链接(${api})中的抽奖信息`)
|
||||
send({
|
||||
url: api,
|
||||
config: {
|
||||
redirect: true
|
||||
},
|
||||
method: 'GET',
|
||||
success: ({ body }) => {
|
||||
if (body.err_msg) {
|
||||
log.error("从API响应数据中获取抽奖信息", body.err_msg)
|
||||
resolve(null)
|
||||
} else {
|
||||
const raw_lottery_info = strToJson(body).lottery_info;
|
||||
if (api.startsWith("file://")) {
|
||||
utils.readLotteryInfoFile(api.substring(7)).then(resolve)
|
||||
} else {
|
||||
send({
|
||||
url: api,
|
||||
config: {
|
||||
redirect: true
|
||||
},
|
||||
method: 'GET',
|
||||
success: ({ body }) => {
|
||||
if (body.err_msg) {
|
||||
log.error("从API响应数据中获取抽奖信息", body.err_msg)
|
||||
resolve(null)
|
||||
} else {
|
||||
const raw_lottery_info = strToJson(body).lottery_info;
|
||||
|
||||
if (raw_lottery_info) {
|
||||
let { length } = raw_lottery_info;
|
||||
if (length) {
|
||||
const lottery_info = raw_lottery_info
|
||||
.reduce(async (pre, cur) => {
|
||||
let results = await pre
|
||||
, { dyid } = cur;
|
||||
if (raw_lottery_info) {
|
||||
let { length } = raw_lottery_info;
|
||||
if (length) {
|
||||
const lottery_info = raw_lottery_info
|
||||
.reduce(async (pre, cur) => {
|
||||
let results = await pre
|
||||
, { dyid } = cur;
|
||||
|
||||
if (!check_if_duplicated || check_if_duplicated >= 2) {
|
||||
log.info('获取动态', `查看动态(${dyid})是否点赞 (${length--})`)
|
||||
const card = await bili.getOneDynamicByDyid(dyid)
|
||||
if (!check_if_duplicated || check_if_duplicated >= 2) {
|
||||
log.info('获取动态', `查看动态(${dyid})是否点赞 (${length--})`)
|
||||
const card = await bili.getOneDynamicByDyid(dyid)
|
||||
|
||||
if (card) {
|
||||
await utils.delay(get_dynamic_detail_wait)
|
||||
if (card) {
|
||||
await utils.delay(get_dynamic_detail_wait)
|
||||
|
||||
const { is_liked } = parseDynamicCard(card)
|
||||
const { is_liked } = parseDynamicCard(card)
|
||||
|
||||
if (is_liked) {
|
||||
log.info('获取动态', `动态(${dyid})已转发过`)
|
||||
} else {
|
||||
cur.is_liked = is_liked
|
||||
results.push(cur)
|
||||
if (is_liked) {
|
||||
log.info('获取动态', `动态(${dyid})已转发过`)
|
||||
} else {
|
||||
cur.is_liked = is_liked
|
||||
results.push(cur)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
results.push(cur)
|
||||
}
|
||||
} else {
|
||||
results.push(cur)
|
||||
}
|
||||
|
||||
return results
|
||||
return results
|
||||
|
||||
}, Promise.resolve([]))
|
||||
}, Promise.resolve([]))
|
||||
|
||||
resolve(lottery_info)
|
||||
return
|
||||
resolve(lottery_info)
|
||||
return
|
||||
}
|
||||
}
|
||||
log.error("从API响应数据中获取抽奖信息", "非Json数据或没有lottery_info或lottery为空")
|
||||
resolve(null)
|
||||
}
|
||||
log.error("从API响应数据中获取抽奖信息", "非Json数据或没有lottery_info或lottery为空")
|
||||
},
|
||||
failure: err => {
|
||||
log.error("从API响应数据中获取抽奖信息", err)
|
||||
resolve(null)
|
||||
}
|
||||
},
|
||||
failure: err => {
|
||||
log.error("从API响应数据中获取抽奖信息", err)
|
||||
resolve(null)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
} else {
|
||||
log.warn('获取动态', `链接为空`)
|
||||
resolve(null)
|
||||
|
||||
+15
-3
@@ -17,7 +17,6 @@ const config = {
|
||||
Articles: [],
|
||||
|
||||
/**
|
||||
* 从API接口中获取抽奖信息
|
||||
* @typedef {object} LotteryInfo
|
||||
* @property {string} lottery_info_type
|
||||
* @property {number} create_time
|
||||
@@ -32,11 +31,19 @@ const config = {
|
||||
* @property {string} des
|
||||
* @property {number} type
|
||||
* @property {boolean} hasOfficialLottery 是否官方
|
||||
* @typedef RespondBody
|
||||
* @typedef {object} RespondBody
|
||||
* @property {string} err_msg 错误信息
|
||||
* @property {LotteryInfo[]} lottery_info
|
||||
* API传回数据类型 {RespondBody}
|
||||
*
|
||||
* - 从API接口中获取抽奖信息
|
||||
* 获取抽奖信息的链接字符串
|
||||
* @example
|
||||
* ["https://github.com/spiritLHL/sync_lottery"]
|
||||
*
|
||||
* - 从当前路径下符合要求的文件中获取
|
||||
* 文件名
|
||||
* @example
|
||||
* ["file://lottery_info_1.json"]
|
||||
*/
|
||||
APIs: [],
|
||||
|
||||
@@ -52,6 +59,11 @@ const config = {
|
||||
*/
|
||||
LotteryOrder: [2, 0, 1, 3],
|
||||
|
||||
/**
|
||||
* 保存抽奖信息至文件
|
||||
*/
|
||||
save_lottery_info_to_file: false,
|
||||
|
||||
/**
|
||||
* API发送数据类型 {LotteryInfo[]}
|
||||
* 上传抽奖信息的链接字符串
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { getRemoteConfig, createDir, createFile } = require("../utils");
|
||||
const { getRemoteConfig, createDir, createFile, dyids_dir } = require("../utils");
|
||||
const config = require("../data/config");
|
||||
|
||||
let global_var = {
|
||||
@@ -47,7 +47,7 @@ let global_var = {
|
||||
this.set('remoteconfig', await getRemoteConfig());
|
||||
}
|
||||
await createDir('dyids');
|
||||
await createFile(num < 2 ? 'dyid.txt' : `dyid${num}.txt`, '', 'a')
|
||||
await createFile(dyids_dir, num < 2 ? 'dyid.txt' : `dyid${num}.txt`, '', 'a')
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+7
-8
@@ -65,17 +65,16 @@ async function update() {
|
||||
.filter(({ name }) => checkPlatform(name))
|
||||
.map(({ browser_download_url }) => browser_download_url)
|
||||
if (download_url.length) {
|
||||
const proxy_host = ['download.fastgit.org']
|
||||
await try_for_each(download_url.entries(), async ([i, url]) => {
|
||||
let proxy_url = new URL(url)
|
||||
proxy_url.host = proxy_host[0]
|
||||
log.warn('自动下载', `切换代理${proxy_host[0]}`)
|
||||
await download(proxy_url.href, `latest_version${i}.zip`)
|
||||
let proxy_url = "https://ghproxy.com/";
|
||||
proxy_url += url
|
||||
log.warn('自动下载', `切换代理${proxy_url}`)
|
||||
await download(proxy_url, `latest_version${i}.zip`)
|
||||
.catch(async err => {
|
||||
log.error('自动下载', err)
|
||||
proxy_url.host = 'github.com'
|
||||
log.warn('自动下载', `使用原始链接github.com`)
|
||||
await download(proxy_url.href, `latest_version${i}.zip`)
|
||||
proxy_url = url
|
||||
log.warn('自动下载', `使用原始链接${proxy_url}`)
|
||||
await download(proxy_url, `latest_version${i}.zip`)
|
||||
})
|
||||
return false
|
||||
})
|
||||
|
||||
+76
-7
@@ -15,6 +15,8 @@ const utils = {
|
||||
config_file: path.join(process.cwd(), "my_config.js"),
|
||||
/**dyids存放目录 */
|
||||
dyids_dir: path.join(process.cwd(), "dyids"),
|
||||
/**lottery_info存放目录 */
|
||||
lottery_info_dir: path.join(process.cwd(), "lottery_info"),
|
||||
/**dyid长度 */
|
||||
dyid_length: 18,
|
||||
/**
|
||||
@@ -230,20 +232,20 @@ const utils = {
|
||||
debug(context, msg) {
|
||||
if (this._level > 3) {
|
||||
if (msg instanceof Object) msg = JSON.stringify(msg, null, 4);
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Debug]"), this._colors[2](`[${context}]`), this._colors[3](`[\n${msg}\n]`)])
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Debug]"), this._colors[2](`[帐号${process.env["NUMBER"]} ${context}]`), this._colors[3](`[\n${msg}\n]`)])
|
||||
}
|
||||
},
|
||||
info(context, msg) {
|
||||
if (this._level > 2)
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Info]"), this._colors[2](`[${context}]`), this._colors[4](`[${msg}]`)])
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Info]"), this._colors[2](`[帐号${process.env["NUMBER"]} ${context}]`), this._colors[4](`[${msg}]`)])
|
||||
},
|
||||
warn(context, msg) {
|
||||
if (this._level > 1)
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Warn]"), this._colors[2](`[${context}]`), this._colors[5](`[\n${msg}\n]`)])
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Warn]"), this._colors[2](`[帐号${process.env["NUMBER"]} ${context}]`), this._colors[5](`[\n${msg}\n]`)])
|
||||
},
|
||||
error(context, msg) {
|
||||
if (this._level > 0)
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Error]"), this._colors[2](`[${context}]`), this._colors[6](`[\n${msg}\n]`)])
|
||||
this.proPrint([this._colors[0](`[${this._iso_time()}]`), this._colors[1]("[Error]"), this._colors[2](`[帐号${process.env["NUMBER"]} ${context}]`), this._colors[6](`[\n${msg}\n]`)])
|
||||
}
|
||||
},
|
||||
/**
|
||||
@@ -343,13 +345,14 @@ const utils = {
|
||||
},
|
||||
/**
|
||||
* CreateFile
|
||||
* @param {string} filepath 相对于dyids的文件路径
|
||||
* @param {string} basename
|
||||
* @param {string} filename
|
||||
* @param {string} [defaultValue] 写入默认值
|
||||
* @param {string} flag
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
createFile(filepath, defaultValue, flag) {
|
||||
const fpath = path.join(utils.dyids_dir, filepath);
|
||||
createFile(basename, filename, defaultValue, flag) {
|
||||
const fpath = path.join(basename, filename);
|
||||
const buffer = Buffer.from(defaultValue);
|
||||
return new Promise((resolve, rejects) => {
|
||||
fs.open(fpath, flag, (err, fd) => {
|
||||
@@ -367,6 +370,25 @@ const utils = {
|
||||
})
|
||||
});
|
||||
},
|
||||
/**
|
||||
* deleteFolderRecursive
|
||||
* @param {*} url
|
||||
*/
|
||||
deleteFolderRecursive(url) {
|
||||
var files = [];
|
||||
if (fs.existsSync(url)) {
|
||||
files = fs.readdirSync(url);
|
||||
files.forEach(function (file) {
|
||||
var curPath = path.join(url, file);
|
||||
if (fs.statSync(curPath).isDirectory()) {
|
||||
utils.deleteFolderRecursive(curPath);
|
||||
} else {
|
||||
fs.unlinkSync(curPath);
|
||||
}
|
||||
});
|
||||
fs.rmdirSync(url);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 读取dyid文件
|
||||
* @param {number} num
|
||||
@@ -384,6 +406,53 @@ const utils = {
|
||||
writeDyidFile(num) {
|
||||
const fpath = num < 2 ? path.join(utils.dyids_dir, 'dyid.txt') : path.join(utils.dyids_dir, `dyid${num}.txt`);
|
||||
return fs.createWriteStream(fpath, { flags: 'a' })
|
||||
},
|
||||
/**
|
||||
* 追加lotteryinfo
|
||||
* @param {string} from
|
||||
* @param {import("./core/searcher").LotteryInfo[]} lottery_info
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
appendLotteryInfoFile(from, lottery_info) {
|
||||
let all_lottery_info = {};
|
||||
try {
|
||||
all_lottery_info = utils.strToJson(fs.readFileSync(path.join(utils.lottery_info_dir, `lottery_info_${Number(process.env.NUMBER)}.json`)).toString())
|
||||
} catch (_) {
|
||||
all_lottery_info = {}
|
||||
}
|
||||
utils
|
||||
.createDir(utils.lottery_info_dir)
|
||||
.then(() => {
|
||||
if (all_lottery_info[from] instanceof Array) {
|
||||
all_lottery_info[from].push(...lottery_info)
|
||||
} else {
|
||||
all_lottery_info[from] = lottery_info
|
||||
}
|
||||
utils.createFile(utils.lottery_info_dir, `lottery_info_${Number(process.env.NUMBER)}.json`, JSON.stringify(all_lottery_info), "w")
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 读取lottery_info
|
||||
* @param {string} filename
|
||||
* @return {Promise<import("./core/searcher").LotteryInfo[]>}
|
||||
*/
|
||||
readLotteryInfoFile(filename) {
|
||||
return new Promise((resolve) => {
|
||||
fs.readFile(path.join(utils.lottery_info_dir, filename), (err, data) => {
|
||||
if (err) {
|
||||
resolve([])
|
||||
} else {
|
||||
let all_lottery_info = utils.strToJson(data.toString('utf8'));
|
||||
resolve(Object.values(all_lottery_info).flat())
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 清空lottery_info
|
||||
*/
|
||||
clearLotteryInfo() {
|
||||
utils.deleteFolderRecursive(utils.lottery_info_dir)
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { version: ve, env_file, config_file, log, hasEnv, delay, hasFileOrDir } = require("./lib/utils");
|
||||
const { version: ve, env_file, config_file, log, hasEnv, delay, hasFileOrDir, clearLotteryInfo } = require("./lib/utils");
|
||||
|
||||
const metainfo = [
|
||||
` _ _ _ _____ _ _ `,
|
||||
@@ -158,11 +158,13 @@ function initConfig() {
|
||||
log.warn('结束运行', '5秒后自动退出');
|
||||
await delay(5 * 1000);
|
||||
} else {
|
||||
clearLotteryInfo();
|
||||
while (loop_wait) {
|
||||
log.info('程序休眠', `${loop_wait / 1000}秒后再次启动`)
|
||||
await delay(loop_wait)
|
||||
if (initEnv() || initConfig()) return;
|
||||
await main()
|
||||
clearLotteryInfo();
|
||||
}
|
||||
log.info('结束运行', '未在config.js中设置休眠时间')
|
||||
}
|
||||
|
||||
+40
-19
@@ -6,30 +6,19 @@ module.exports = Object.freeze({
|
||||
/**
|
||||
* 监视更转的用户uid
|
||||
*/
|
||||
UIDs: [
|
||||
689277291,
|
||||
241675899
|
||||
],
|
||||
UIDs: [],
|
||||
|
||||
/**
|
||||
* 监视的tag
|
||||
*/
|
||||
TAGs: [
|
||||
'互动抽奖',
|
||||
'转发抽奖',
|
||||
'动态抽奖',
|
||||
'抽奖',
|
||||
],
|
||||
TAGs: [],
|
||||
|
||||
/**
|
||||
* 监视的专栏关键词
|
||||
*/
|
||||
Articles: [
|
||||
'抽奖合集'
|
||||
],
|
||||
Articles: [],
|
||||
|
||||
/**
|
||||
* 从API接口中获取抽奖信息
|
||||
* @typedef {object} LotteryInfo
|
||||
* @property {string} lottery_info_type
|
||||
* @property {number} create_time
|
||||
@@ -44,15 +33,21 @@ module.exports = Object.freeze({
|
||||
* @property {string} des
|
||||
* @property {number} type
|
||||
* @property {boolean} hasOfficialLottery 是否官方
|
||||
* @typedef RespondBody
|
||||
* @typedef {object} RespondBody
|
||||
* @property {string} err_msg 错误信息
|
||||
* @property {LotteryInfo[]} lottery_info
|
||||
* API传回数据类型 {RespondBody}
|
||||
*
|
||||
* - 从API接口中获取抽奖信息
|
||||
* 获取抽奖信息的链接字符串
|
||||
* @example
|
||||
* "https://github.com/spiritLHL/sync_lottery"
|
||||
* ["https://github.com/spiritLHL/sync_lottery"]
|
||||
*
|
||||
* - 从当前路径下符合要求的文件中获取
|
||||
* 文件名
|
||||
* @example
|
||||
* ["file://lottery_info_1.json"]
|
||||
*/
|
||||
APIs: [],
|
||||
APIs: ["file://lottery_info_1.json"],
|
||||
|
||||
/**
|
||||
* 抽奖参与顺序组合
|
||||
@@ -66,6 +61,11 @@ module.exports = Object.freeze({
|
||||
*/
|
||||
LotteryOrder: [2, 0, 1, 3],
|
||||
|
||||
/**
|
||||
* 保存抽奖信息至文件
|
||||
*/
|
||||
save_lottery_info_to_file: false,
|
||||
|
||||
/**
|
||||
* API发送数据类型 {LotteryInfo[]}
|
||||
* 上传抽奖信息的链接字符串
|
||||
@@ -434,7 +434,28 @@ module.exports = Object.freeze({
|
||||
* 针对某一账号的特别设置
|
||||
* config_[数字] 依次类推
|
||||
*/
|
||||
config_1: {},
|
||||
config_1: {
|
||||
/**
|
||||
* 手动添加抽奖号UID
|
||||
* - 抽奖动态下的二级小号
|
||||
*/
|
||||
UIDs: [],
|
||||
|
||||
TAGs: [
|
||||
'互动抽奖',
|
||||
'转发抽奖',
|
||||
'动态抽奖',
|
||||
'抽奖',
|
||||
],
|
||||
|
||||
Articles: [
|
||||
'抽奖合集'
|
||||
],
|
||||
|
||||
APIs: [],
|
||||
|
||||
save_lottery_info_to_file: true,
|
||||
},
|
||||
config_2: {},
|
||||
config_3: {}
|
||||
})
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lottery-auto-script",
|
||||
"version": "2.6.3",
|
||||
"version": "2.6.5",
|
||||
"description": "自动参与B站动态抽奖",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
|
||||
+8
-3
@@ -24,13 +24,18 @@ if [[ -z "$1" ]]; then
|
||||
fi
|
||||
|
||||
mkdir -p $TARGET_DIR
|
||||
npm install
|
||||
|
||||
if [[ "$1" == *"arm"* ]]; then
|
||||
podman build -f Dockerfile.pkg-arm64 -t pkg-arm64
|
||||
podman run -it --rm -v ${PWD}/dist:/root/lottery/dist pkg-arm64
|
||||
OUTFILE="$TARGET_DIR/lottery-auto-script-node18-$1"
|
||||
sudo podman run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
podman run -it \
|
||||
--rm \
|
||||
-v ${PWD}:/root/lottery \
|
||||
shanmite/pkg-arm64 -t "node18.5.0-$1" -o "$OUTFILE" .
|
||||
elif [[ "$1" == *"x64"* ]]; then
|
||||
OUTFILE="$TARGET_DIR/lottery-auto-script-$1"
|
||||
npx pkg -t "$1" -o $OUTFILE .
|
||||
npx pkg -t "$1" -o "$OUTFILE" .
|
||||
fi
|
||||
|
||||
for file in "$TARGET_DIR/"*; do
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
set -e
|
||||
|
||||
NAME=LotteryAutoScript
|
||||
|
||||
# 视网络情况选择链接
|
||||
GIT_REPO=https://github.com/shanmiteko/${NAME}.git
|
||||
# GIT_REPO=https://ghproxy.com/https://github.com/shanmiteko/${NAME}.git
|
||||
|
||||
@@ -14,11 +16,13 @@ else
|
||||
fi
|
||||
|
||||
if [ -f "$NAME/my_config.js" ]; then
|
||||
echo 'my_config 已存在'
|
||||
else
|
||||
cp $NAME/my_config.example.js $NAME/my_config.js
|
||||
fi
|
||||
|
||||
if [ -f "$NAME/env.js" ]; then
|
||||
echo 'env.js 已存在'
|
||||
else
|
||||
cp $NAME/env.example.js $NAME/env.js
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user