mirror of
https://github.com/shanmiteko/LotteryAutoScript.git
synced 2026-07-22 21:13:47 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebf7440ef2 | ||
|
|
a0e668bcb5 | ||
|
|
a47472a3e4 |
@@ -178,7 +178,7 @@ cd lottery
|
||||
进入lottery上一级目录
|
||||
|
||||
```bash
|
||||
docker image rm shanmite/lottery_auto_docker
|
||||
docker image rm -f shanmite/lottery_auto_docker
|
||||
rm -rf lottery/
|
||||
```
|
||||
|
||||
|
||||
+5
-5
@@ -8,7 +8,9 @@
|
||||
* ## 账号相关参数
|
||||
* - `COOKIE` 是必填项
|
||||
* - `NUMBER` 表示是第几个账号
|
||||
* - `PAT` 与 `GITHUB_REPOSITORY` 如果之前在Github Action上运行过脚本, 可填写已下载转发过的动态dyid, 之后可移除
|
||||
* - `CLEAR` 是否启用清理功能
|
||||
* - `ENABLE_MULTIPLE_ACCOUNT` 是否启用多账号
|
||||
* - `MULTIPLE_ACCOUNT_PARM` 多账号参数(JSON格式)
|
||||
*
|
||||
* ## 多账号
|
||||
* 1. 将 ENABLE_MULTIPLE_ACCOUNT 的值改为true
|
||||
@@ -21,10 +23,8 @@ const account_parm = {
|
||||
COOKIE: "",
|
||||
NUMBER: 1,
|
||||
CLEAR: true,
|
||||
LOCALLAUNCH: true,
|
||||
PAT: "",
|
||||
GITHUB_REPOSITORY: "用户名/仓库名",
|
||||
ENABLE_MULTIPLE_ACCOUNT: false
|
||||
ENABLE_MULTIPLE_ACCOUNT: false,
|
||||
MULTIPLE_ACCOUNT_PARM: ""
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,31 +1,6 @@
|
||||
const Base = require("./Base");
|
||||
const GihubAPI = require("./GithubAPI");
|
||||
|
||||
const MyStorage = {
|
||||
/**
|
||||
* 初始化dyid.txt
|
||||
*/
|
||||
init: () => {
|
||||
return new Promise((resolve) => {
|
||||
GihubAPI.listArtifacts().then(async artifact => {
|
||||
const { id, size_in_bytes } = artifact;
|
||||
if (size_in_bytes) {
|
||||
GihubAPI.downloadArtifacts(id).then(async status => {
|
||||
if (status) {
|
||||
Base.tooltip.log('存储初始化成功');
|
||||
} else {
|
||||
Base.tooltip.log('存储初始化失败');
|
||||
await Base.createFile('dyid.txt', '', 'a')
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
} else {
|
||||
await Base.createFile('dyid.txt', '', 'a')
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 搜索dyid
|
||||
* @param {string} dyid
|
||||
|
||||
+9
-6
@@ -136,9 +136,9 @@ class Public {
|
||||
obj.ctrl = (typeof extend_json === 'undefined') ? [] : strToJson(extend_json).ctrl || [];
|
||||
/* 是否有官方抽奖 */
|
||||
obj.hasOfficialLottery = (typeof extension === 'undefined') ? false : typeof extension.lott === 'undefined' ? false : true;
|
||||
const item = cardToJson.item || {};
|
||||
/* 转发者的描述 */
|
||||
obj.description = item.content || item.description || '';
|
||||
const { item = {} } = cardToJson;
|
||||
/* 转发者的描述 后两个分别是视频动态的描述和视频本身的描述*/
|
||||
obj.description = item.content || item.description || cardToJson.dynamic || cardToJson.desc || '';
|
||||
if (obj.type === 1) {
|
||||
/* 被转发者的UID */
|
||||
obj.origin_uid = desc.origin.uid;
|
||||
@@ -160,11 +160,14 @@ class Public {
|
||||
false : typeof origin_extension.lott === 'undefined' ?
|
||||
false : true;
|
||||
const origin = cardToJson.origin || '{}';
|
||||
const { user, item } = strToJson(origin);
|
||||
const originToJson = strToJson(origin);
|
||||
const { user, item } = originToJson;
|
||||
/* 被转发者的name */
|
||||
obj.origin_uname = typeof user === 'undefined' ? '' : user.name || user.uname || '';
|
||||
obj.origin_uname = typeof user === 'undefined'
|
||||
? '' : user.name || user.uname || '';
|
||||
/* 被转发者的描述 */
|
||||
obj.origin_description = typeof item === 'undefined' ? '' : item.content || item.description || '';
|
||||
obj.origin_description = typeof item === 'undefined'
|
||||
? '' : item.content || item.description || originToJson.dynamic || originToJson.desc || '';
|
||||
}
|
||||
array.push(obj);
|
||||
});
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
const Base = require("./Base");
|
||||
const BiliAPI = require("./BiliAPI");
|
||||
const { trigger } = require("./GithubAPI");
|
||||
const Public = require("./Public");
|
||||
const GlobalVar = require('./GlobalVar');
|
||||
const { followWhiteList } = require("./config");
|
||||
const config = require("./config");
|
||||
|
||||
/** Github运行限制时间*/
|
||||
const MAX_TIME = 6 * 60 * 60 * 1000 - 6 * 60 * 1000;
|
||||
/**动态偏移量 */
|
||||
let offset = '0';
|
||||
|
||||
@@ -35,15 +32,6 @@ async function getFollowList() {
|
||||
*/
|
||||
async function clear() {
|
||||
const { clear_max_day, clear_remove_dynamic, clear_remove_attention, clear_remove_delay, clear_dynamic_type } = config;
|
||||
if (!process.env.LOCALLAUNCH) {
|
||||
setTimeout(() => {
|
||||
Base.tooltip.log('运行时间超过Actions上限 - 6小时');
|
||||
Base.tooltip.log('尝试再次触发clear 并中止此任务')
|
||||
trigger('clear.yml').then(() => {
|
||||
process.exit(0);
|
||||
})
|
||||
}, MAX_TIME);
|
||||
}
|
||||
let success = true;
|
||||
const uid_list = await getFollowList();
|
||||
if (!clear_remove_dynamic && clear_remove_attention) {
|
||||
|
||||
+2
-11
@@ -1,14 +1,5 @@
|
||||
const { config_file, tooltip } = require('./Base');
|
||||
|
||||
const my_config = (() => {
|
||||
let _my_config = {}
|
||||
try {
|
||||
_my_config = require(config_file)
|
||||
} catch (e) {
|
||||
tooltip.log("[config]自定义设置异常 原因如下:\n" + e);
|
||||
}
|
||||
return _my_config;
|
||||
})();
|
||||
const { config_file } = require('./Base');
|
||||
const my_config = require(config_file);
|
||||
|
||||
const config = {
|
||||
...my_config["default_config"],
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
const Base = require('./Base');
|
||||
const BiliAPI = require('./BiliAPI');
|
||||
const GihubAPI = require("./GithubAPI");
|
||||
const eventBus = require('./eventBus');
|
||||
const GlobalVar = require('./GlobalVar');
|
||||
const Public = require('./Public');
|
||||
@@ -8,12 +7,9 @@ const Monitor = require('./Monitor');
|
||||
const { sendNotify } = require('./sendNotify');
|
||||
const config = require('./config');
|
||||
|
||||
/** Github运行限制时间*/
|
||||
const MAX_TIME = 6 * 60 * 60 * 1000 - 6 * 60 * 1000;
|
||||
|
||||
async function createRandomDynamic(num) {
|
||||
Base.tooltip.log(`准备创建${num}条随机动态`);
|
||||
if (config.create_dy) {
|
||||
Base.tooltip.log(`准备创建${num}条随机动态`);
|
||||
const Dynamic = await Public.prototype.checkAllDynamic(GlobalVar.get("myUID"), 1);
|
||||
if ((Dynamic.allModifyDynamicResArray[0] || { type: 0 }).type === 1) {
|
||||
for (let index = 0; index < num; index++) {
|
||||
@@ -27,7 +23,7 @@ async function createRandomDynamic(num) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 主函数
|
||||
* 抽奖主函数
|
||||
* @param {string} cookie
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
@@ -59,21 +55,7 @@ function start() {
|
||||
eventBus.flush();
|
||||
resolve();
|
||||
})
|
||||
if (process.env.LOCALLAUNCH) {
|
||||
eventBus.emit('Turn_on_the_Monitor');
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
eventBus.emit('Turn_off_the_Monitor', '运行时间超过Actions上限 - 6小时')
|
||||
}, MAX_TIME);
|
||||
GihubAPI.hasLotteryRun().then(s => {
|
||||
if (s) {
|
||||
Base.tooltip.log("有冲突的工作流故终止此任务");
|
||||
resolve()
|
||||
} else {
|
||||
eventBus.emit('Turn_on_the_Monitor');
|
||||
}
|
||||
})
|
||||
}
|
||||
eventBus.emit('Turn_on_the_Monitor');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+1
-9
@@ -1,6 +1,5 @@
|
||||
const Base = require("./Base");
|
||||
const GlobalVar = require("./GlobalVar");
|
||||
const MyStorage = require("./MyStorage");
|
||||
const config = require("./config");
|
||||
|
||||
const key_map = new Map([['DedeUserID', 'myUID'], ['bili_jct', 'csrf']]);
|
||||
@@ -24,14 +23,7 @@ async function setVariable(cookie, n) {
|
||||
GlobalVar.set('remoteconfig', await Base.getRemoteConfig());
|
||||
}
|
||||
await Base.createDir('dyids');
|
||||
if (process.env.PAT) {
|
||||
if (process.env.CI) {
|
||||
process.env.NUMBER = 1;
|
||||
}
|
||||
await MyStorage.init()
|
||||
} else {
|
||||
await Base.createFile(n < 2 ? 'dyid.txt' : `dyid${n}.txt`, '', 'a')
|
||||
}
|
||||
await Base.createFile(n < 2 ? 'dyid.txt' : `dyid${n}.txt`, '', 'a')
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const { env_file, tooltip, delay } = require("./lib/Base");
|
||||
const { loop_wait } = require("./lib/config");
|
||||
|
||||
/**多账号存储 */
|
||||
let multiple_account = [];
|
||||
|
||||
if (!process.env.CI) {
|
||||
@@ -10,70 +12,64 @@ if (!process.env.CI) {
|
||||
initEnv()
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<string>} 错误信息
|
||||
*/
|
||||
async function main() {
|
||||
const { COOKIE, NUMBER, CLEAR, PAT, LOCALLAUNCH, ENABLE_MULTIPLE_ACCOUNT, MULTIPLE_ACCOUNT } = process.env;
|
||||
if (LOCALLAUNCH || PAT) {
|
||||
if (ENABLE_MULTIPLE_ACCOUNT) {
|
||||
let muti_acco = multiple_account.length
|
||||
? multiple_account
|
||||
: JSON.parse(MULTIPLE_ACCOUNT);
|
||||
const { COOKIE, NUMBER, CLEAR, ENABLE_MULTIPLE_ACCOUNT, MULTIPLE_ACCOUNT_PARM } = process.env;
|
||||
if (ENABLE_MULTIPLE_ACCOUNT) {
|
||||
let muti_acco = multiple_account.length
|
||||
? multiple_account
|
||||
: JSON.parse(MULTIPLE_ACCOUNT_PARM);
|
||||
|
||||
process.env.ENABLE_MULTIPLE_ACCOUNT = '';
|
||||
process.env.ENABLE_MULTIPLE_ACCOUNT = '';
|
||||
|
||||
for (const acco of muti_acco) {
|
||||
process.env.COOKIE = acco.COOKIE;
|
||||
process.env.NUMBER = acco.NUMBER;
|
||||
process.env.CLEAR = acco.CLEAR;
|
||||
await main();
|
||||
await delay(acco.WAIT);
|
||||
}
|
||||
} else {
|
||||
if (COOKIE) {
|
||||
const { setVariable } = require("./lib/setVariable");
|
||||
await setVariable(COOKIE, Number(NUMBER));
|
||||
|
||||
const { start, isMe, checkCookie } = require("./lib/lottery-in-nodejs");
|
||||
const { clear } = require("./lib/clear");
|
||||
|
||||
tooltip.log('[LotteryAutoScript] 账号' + NUMBER);
|
||||
|
||||
if (await checkCookie(NUMBER)) {
|
||||
const mode = process.env.lottery_mode;
|
||||
const help_msg = "用法: lottery [OPTIONS]\n\nOPTIONS:\n\tstart 启动抽奖\n\tcheck 中奖检查\n\tclear 清理动态和关注\n";
|
||||
switch (mode) {
|
||||
case 'start':
|
||||
tooltip.log('开始参与抽奖');
|
||||
await start();
|
||||
break;
|
||||
case 'check':
|
||||
tooltip.log('检查是否中奖');
|
||||
await isMe();
|
||||
break;
|
||||
case 'clear':
|
||||
if (CLEAR) {
|
||||
tooltip.log('开始清理动态');
|
||||
await clear();
|
||||
tooltip.log('清理动态完毕');
|
||||
}
|
||||
break;
|
||||
case 'help':
|
||||
console.log(help_msg);
|
||||
break;
|
||||
case undefined:
|
||||
console.log(`错误: 未提供以下参数\n\t[OPTIONS]\n`);
|
||||
console.log(help_msg);
|
||||
break
|
||||
default:
|
||||
console.log(`错误: 提供了错误的[OPTIONS] -> ${mode}\n`)
|
||||
console.log(help_msg);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tooltip.log('请查看README文件, 在env.js指定位置填入cookie')
|
||||
}
|
||||
for (const acco of muti_acco) {
|
||||
process.env.COOKIE = acco.COOKIE;
|
||||
process.env.NUMBER = acco.NUMBER;
|
||||
process.env.CLEAR = acco.CLEAR;
|
||||
await main();
|
||||
await delay(acco.WAIT);
|
||||
}
|
||||
} else {
|
||||
tooltip.log('请查看README文件, 填入相应的PAT, 若是本地运行则设LOCALLAUNCH为true');
|
||||
if (!COOKIE) {
|
||||
return '请查看README文件, 在env.js指定位置填入cookie'
|
||||
}
|
||||
const { setVariable } = require("./lib/setVariable");
|
||||
await setVariable(COOKIE, Number(NUMBER));
|
||||
|
||||
const { start, isMe, checkCookie } = require("./lib/lottery-in-nodejs");
|
||||
const { clear } = require("./lib/clear");
|
||||
|
||||
tooltip.log('[LotteryAutoScript] 账号' + NUMBER);
|
||||
|
||||
if (await checkCookie(NUMBER)) {
|
||||
const mode = process.env.lottery_mode;
|
||||
const help_msg = "用法: lottery [OPTIONS]\n\nOPTIONS:\n\tstart 启动抽奖\n\tcheck 中奖检查\n\tclear 清理动态和关注\n\thelp 帮助信息\n";
|
||||
switch (mode) {
|
||||
case 'start':
|
||||
tooltip.log('开始参与抽奖');
|
||||
await start();
|
||||
break;
|
||||
case 'check':
|
||||
tooltip.log('检查是否中奖');
|
||||
await isMe();
|
||||
break;
|
||||
case 'clear':
|
||||
if (CLEAR) {
|
||||
tooltip.log('开始清理动态');
|
||||
await clear();
|
||||
tooltip.log('清理动态完毕');
|
||||
}
|
||||
break;
|
||||
case 'help':
|
||||
return help_msg
|
||||
case undefined:
|
||||
return "错误: 未提供以下参数\n\t[OPTIONS]\n\n" + help_msg
|
||||
default:
|
||||
return `错误: 提供了错误的[OPTIONS] -> ${mode}\n\n` + help_msg
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,8 +88,14 @@ async function main() {
|
||||
console.log(metainfo);
|
||||
/**OPTIONS */
|
||||
process.env.lottery_mode = process.argv[2]
|
||||
await main();
|
||||
const err_msg = await main();
|
||||
if (err_msg) {
|
||||
console.log(err_msg);
|
||||
} else {
|
||||
tooltip.log(`休眠${loop_wait / 1000}秒后再次启动`)
|
||||
await delay(loop_wait);
|
||||
}
|
||||
tooltip.log('5秒后自动退出');
|
||||
await delay(5 * 1000);
|
||||
process.exit(0)
|
||||
process.exit(0);
|
||||
})()
|
||||
+12
-5
@@ -8,7 +8,6 @@ module.exports = {
|
||||
*/
|
||||
UIDs: [
|
||||
31252386,
|
||||
35719643,
|
||||
689277291
|
||||
],
|
||||
|
||||
@@ -63,12 +62,18 @@ module.exports = {
|
||||
*/
|
||||
maxday: Infinity,
|
||||
|
||||
/**
|
||||
* - 整体循环等待时间(指所有转发完毕后的休眠时间)
|
||||
* - 单位毫秒
|
||||
*/
|
||||
loop_wait: 60 * 60 * 1000,
|
||||
|
||||
/**
|
||||
* - 转发间隔时间
|
||||
* - 单位毫秒
|
||||
* - 上下浮动50%
|
||||
*/
|
||||
wait: 100000,
|
||||
wait: 100 * 1000,
|
||||
|
||||
/**
|
||||
* - 检索动态间隔
|
||||
@@ -127,7 +132,7 @@ module.exports = {
|
||||
/**
|
||||
* 屏蔽词
|
||||
*/
|
||||
blockword: ["脚本抽奖", "恭喜", "结果", "抽奖号"],
|
||||
blockword: ["脚本抽奖", "恭喜", "结果", "抽奖号", "钓鱼"],
|
||||
|
||||
/**
|
||||
* 取关白名单
|
||||
@@ -151,7 +156,8 @@ module.exports = {
|
||||
],
|
||||
|
||||
/**
|
||||
* 抽奖UP用户分组id(网页端点击分区后地址栏中的tagid)
|
||||
* - 抽奖UP用户分组id(网页端点击分区后地址栏中的tagid)
|
||||
* - 自动获取
|
||||
*/
|
||||
partition_id: 0,
|
||||
|
||||
@@ -161,7 +167,8 @@ module.exports = {
|
||||
is_exception: false,
|
||||
|
||||
/**
|
||||
* 取关分区
|
||||
* - 取关分区
|
||||
* - 默认为: 此处存放因抽奖临时关注的up
|
||||
*/
|
||||
clear_partition: '',
|
||||
|
||||
|
||||
Reference in New Issue
Block a user