mirror of
https://github.com/shanmiteko/LotteryAutoScript.git
synced 2026-07-22 21:13:47 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c85ea6bc77 | ||
|
|
eae72dbdd7 | ||
|
|
111602f248 | ||
|
|
d366e252e9 | ||
|
|
40dcc5f879 | ||
|
|
8c0d96afc6 | ||
|
|
09b6db4f8b | ||
|
|
24e16ed8bc | ||
|
|
fabe9f7d6e | ||
|
|
1962d97bc1 | ||
|
|
c43ab13790 | ||
|
|
11625b3850 | ||
|
|
8c7a6d13d6 |
@@ -1,5 +1,47 @@
|
||||
<!-- markdownlint-disable MD036 MD024-->
|
||||
# CHANGELOG
|
||||
## 主要变化(2.3.6)
|
||||
* eae72db feat: minfollower填0可关闭本地粉丝数筛选
|
||||
* 111602f perf: 日志显示是否转发过
|
||||
* d366e25 fix: 转发动态时非限制性错误码(#72)
|
||||
## 较上一版本变化
|
||||
* 变更可执行文件
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](CHANGELOG.md)变更说明_
|
||||
|
||||
**Full Changelog**: https://github.com/shanmiteko/LotteryAutoScript/compare/v2.3.5...v2.3.6
|
||||
|
||||
## 主要变化(2.3.5)
|
||||
* 8c0d96a refactor: 检测是否已经发送过随机动态(#71)
|
||||
* 09b6db4 feat: 新增设置`check_session_pages`(#66)
|
||||
## 较上一版本变化
|
||||
* 变更可执行文件
|
||||
* [my_config.js](my_config.example.js)增加
|
||||
- `check_session_pages` - 检查私信页数
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](CHANGELOG.md)变更说明_
|
||||
|
||||
**Full Changelog**: https://github.com/shanmiteko/LotteryAutoScript/compare/v2.3.4...v2.3.5
|
||||
|
||||
## 主要变化(2.3.4)
|
||||
* 1962d97 fix: 过滤专栏时间失效(#67)
|
||||
## 较上一版本变化
|
||||
只变更可执行文件
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](CHANGELOG.md)变更说明_
|
||||
|
||||
**Full Changelog**: https://github.com/shanmiteko/LotteryAutoScript/compare/v2.3.2...v2.3.4
|
||||
|
||||
## 主要变化(2.3.3)
|
||||
* 11625b3 feat: 检索专栏时能够根据发布时间进行过滤(#65)
|
||||
* 8c7a6d1 fix: 多帐号设置未更新
|
||||
## 较上一版本变化
|
||||
[my_config.js](my_config.example.js)增加
|
||||
* `article_create_time` - 专栏创建时间距离现在的最大天数
|
||||
|
||||
_如果之前版本小于上一版本,请查看[CHANGELOG](CHANGELOG.md)变更说明_
|
||||
|
||||
**Full Changelog**: https://github.com/shanmiteko/LotteryAutoScript/compare/v2.3.2...v.2.3.3
|
||||
|
||||
## 主要变化(2.3.2)
|
||||
|
||||
|
||||
+3
-2
@@ -10,7 +10,7 @@ const bili = require('./net/bili')
|
||||
async function isMe() {
|
||||
let desp = '';
|
||||
const
|
||||
{ notice_key_words, update_session_wait, get_session_wait } = config,
|
||||
{ notice_key_words, update_session_wait, get_session_wait, check_session_pages } = config,
|
||||
UnreadAtNum = await bili.getUnreadAtNum(),
|
||||
UnreadSessionNum = await bili.getUnreadSessionNum(),
|
||||
{ follow_unread, unfollow_unread } = UnreadSessionNum || { unfollow_unread: 0, follow_unread: 0 };
|
||||
@@ -34,6 +34,7 @@ async function isMe() {
|
||||
const check = async (type) => {
|
||||
let session_t = '';
|
||||
let MySession = await bili.getSessionInfo(type)
|
||||
log.info("准备检查私信", check_session_pages + "页")
|
||||
for (const index of infiniteNumber()) {
|
||||
for (const Session of MySession.data) {
|
||||
const { sender_uid, session_ts, timestamp, unread_count, talker_id, msg_seqno } = Session;
|
||||
@@ -53,7 +54,7 @@ async function isMe() {
|
||||
await delay(update_session_wait);
|
||||
}
|
||||
}
|
||||
if (MySession.has_more && index < 16) {
|
||||
if (MySession.has_more && index < check_session_pages) {
|
||||
await delay(get_session_wait);
|
||||
MySession = await bili.getSessionInfo(type, session_t)
|
||||
} else {
|
||||
|
||||
+14
-9
@@ -110,14 +110,19 @@ class Monitor extends Searcher {
|
||||
continue
|
||||
}
|
||||
} else if (Lottery.uid[0]) {
|
||||
const followerNum = await bili.getUserInfo(Lottery.uid[0]);
|
||||
if (followerNum < 0) {
|
||||
return 51
|
||||
}
|
||||
if (followerNum < config.minfollower) {
|
||||
log.info('过滤', `粉丝数(${followerNum})小于指定数量`)
|
||||
await delay(filter_wait)
|
||||
continue
|
||||
const { minfollower } = config
|
||||
if (minfollower > 0) {
|
||||
const followerNum = await bili.getUserInfo(Lottery.uid[0]);
|
||||
if (followerNum < 0) {
|
||||
return 51
|
||||
}
|
||||
if (followerNum < minfollower) {
|
||||
log.info('过滤', `粉丝数(${followerNum})小于指定数量`)
|
||||
await delay(filter_wait)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
log.info('过滤', "不过滤粉丝数")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +210,7 @@ class Monitor extends Searcher {
|
||||
return true
|
||||
});
|
||||
|
||||
if (lottery_param[0] !== "APIs" && set_lottery_info_url) {
|
||||
if (lottery_param[0] !== "APIs" && set_lottery_info_url && protoLotteryInfo.length) {
|
||||
log.info("上传抽奖信息", "开始")
|
||||
await new Promise((resolve) => {
|
||||
send({
|
||||
|
||||
+20
-9
@@ -1,7 +1,7 @@
|
||||
const utils = require('../utils');
|
||||
const bili = require('../net/bili');
|
||||
const { send } = require("../net/http");
|
||||
const { article_scan_page, not_check_article, get_dynamic_detail_wait, uid_scan_page, search_wait, tag_scan_page } = require("../data/config");
|
||||
const { article_scan_page, article_create_time, not_check_article, get_dynamic_detail_wait, uid_scan_page, search_wait, tag_scan_page } = require("../data/config");
|
||||
|
||||
const { log } = utils
|
||||
|
||||
@@ -237,8 +237,6 @@ class Searcher {
|
||||
const results = await pre
|
||||
, { origin_dynamic_id } = cur;
|
||||
|
||||
log.info('获取动态', `查看源动态(${origin_dynamic_id})是否点赞 (${length--})`)
|
||||
|
||||
const card = await bili.getOneDynamicByDyid(origin_dynamic_id)
|
||||
|
||||
if (card) {
|
||||
@@ -246,6 +244,11 @@ class Searcher {
|
||||
|
||||
const { is_liked } = parseDynamicCard(card)
|
||||
|
||||
log.info('获取动态', `查看源动态(${origin_dynamic_id})是否点赞 (${length--})`)
|
||||
if (is_liked) {
|
||||
log.info('获取动态', `动态(${origin_dynamic_id})已转发过`)
|
||||
}
|
||||
|
||||
return [...results, {
|
||||
lottery_info_type: 'uid',
|
||||
create_time: cur.origin_create_time,
|
||||
@@ -336,9 +339,14 @@ class Searcher {
|
||||
/**存储所有专栏中的dyid */
|
||||
let dyinfos = [];
|
||||
/**遍历专栏s */
|
||||
for (const cv of cvs) {
|
||||
for (const { id, pub_time } of cvs) {
|
||||
let now_time = Math.floor(Date.now() / 1000);
|
||||
if ((now_time - pub_time) / 86400 > article_create_time) {
|
||||
log.warn("获取动态", `该专栏(${id})创建时间大于设定天数(${article_create_time}天)`)
|
||||
continue
|
||||
}
|
||||
const
|
||||
content = await bili.getOneArticleByCv(cv),
|
||||
content = await bili.getOneArticleByCv(id),
|
||||
dyids = content.match(/(?<=t.bilibili.com\/)[0-9]+/g) || [],
|
||||
dyids_set = [...new Set(dyids)],
|
||||
/**判断此专栏是否查看过的权重 */
|
||||
@@ -349,12 +357,11 @@ class Searcher {
|
||||
_weight = 0,
|
||||
/**单个专栏中的dyid */
|
||||
_dyinfos = [];
|
||||
log.info('获取动态', `提取专栏(${cv})中提及的dyid(${length})`)
|
||||
log.info('获取动态', `提取专栏(${id})中提及的dyid(${length})`)
|
||||
|
||||
/**遍历某专栏中的dyids */
|
||||
for (const dyid of dyids_set) {
|
||||
if (dyid.length === utils.dyid_length) {
|
||||
log.info('获取动态', `查看专栏中所提及动态(${dyid})是否点赞 (${length--})`)
|
||||
|
||||
const card = await bili.getOneDynamicByDyid(dyid)
|
||||
|
||||
@@ -364,6 +371,7 @@ class Searcher {
|
||||
const parsed_card = parseDynamicCard(card)
|
||||
, { is_liked } = parsed_card;
|
||||
|
||||
log.info('获取动态', `查看专栏中所提及动态(${dyid})是否点赞 (${length--})`)
|
||||
if (is_liked) {
|
||||
log.info('获取动态', `动态(${dyid})已转发过`)
|
||||
_weight += 1;
|
||||
@@ -434,8 +442,6 @@ class Searcher {
|
||||
const results = await pre
|
||||
, { dyid } = cur;
|
||||
|
||||
log.info('获取动态', `查看动态(${dyid})是否点赞 (${length--})`)
|
||||
|
||||
const card = await bili.getOneDynamicByDyid(dyid)
|
||||
|
||||
if (card) {
|
||||
@@ -443,6 +449,11 @@ class Searcher {
|
||||
|
||||
const { is_liked } = parseDynamicCard(card)
|
||||
|
||||
log.info('获取动态', `查看动态(${dyid})是否点赞 (${length--})`)
|
||||
if (is_liked) {
|
||||
log.info('获取动态', `动态(${dyid})已转发过`)
|
||||
}
|
||||
|
||||
cur.is_liked = is_liked
|
||||
|
||||
return [...results, cur]
|
||||
|
||||
+12
-4
@@ -95,6 +95,11 @@ const config = {
|
||||
*/
|
||||
article_scan_page: 3,
|
||||
|
||||
/**
|
||||
* - 专栏创建时间距离现在的最大天数
|
||||
*/
|
||||
article_create_time: 7,
|
||||
|
||||
/**
|
||||
* - 不检查专栏是否看过,若选择检查可以提高检测效率
|
||||
* - 默认false(检查)
|
||||
@@ -264,6 +269,11 @@ const config = {
|
||||
"中奖|获得|填写|写上|提供|收货地址|支付宝账号|码|大会员"
|
||||
],
|
||||
|
||||
/**
|
||||
* - 获取私信页数
|
||||
*/
|
||||
check_session_pages: 16,
|
||||
|
||||
/**
|
||||
* - 清理白名单uid或dyid
|
||||
* - 英文逗号分隔 如: 1,2,3
|
||||
@@ -335,10 +345,8 @@ const config = {
|
||||
* @param {string} n
|
||||
*/
|
||||
updata(n) {
|
||||
const new_config = this.raw_config()[`config_${n}`];
|
||||
if (new_config) {
|
||||
this.setObject(new_config)
|
||||
}
|
||||
this.init()
|
||||
this.setObject(this.raw_config()[`config_${n}`])
|
||||
},
|
||||
|
||||
init() {
|
||||
|
||||
+23
-19
@@ -8,32 +8,36 @@ const utils = require("../utils");
|
||||
* @returns
|
||||
*/
|
||||
async function randomDynamic(num) {
|
||||
const { create_dy_type, dy_contents, random_dynamic_wait } = config;
|
||||
let dynamics = []
|
||||
const
|
||||
{ create_dy_type, dy_contents, random_dynamic_wait } = config,
|
||||
hasShareVideo = create_dy_type === -1 || create_dy_type === 1,
|
||||
hasRandomCreate = create_dy_type === -1 || create_dy_type === 0 || typeof create_dy_type === 'undefined';
|
||||
|
||||
if (create_dy_type === -1 || create_dy_type === 0 || typeof create_dy_type === 'undefined') {
|
||||
if (hasShareVideo) {
|
||||
dynamics = await bili.getTopRcmd()
|
||||
for (let index = 0; dynamics.length < num; index++) {
|
||||
dynamics.push(...await bili.getTopRcmd())
|
||||
}
|
||||
}
|
||||
|
||||
if (hasRandomCreate) {
|
||||
for (let index = 0; index < num; index++) {
|
||||
await bili.createDynamic(utils.getRandomOne(dy_contents));
|
||||
await utils.delay(random_dynamic_wait);
|
||||
dynamics.push(utils.getRandomOne(dy_contents))
|
||||
}
|
||||
}
|
||||
|
||||
if (create_dy_type === -1 || create_dy_type === 1) {
|
||||
let videos = await bili.getTopRcmd()
|
||||
for (let index = 0; videos.length < num; index++) {
|
||||
videos.push(...await bili.getTopRcmd())
|
||||
}
|
||||
|
||||
await utils.try_for_each(videos, async ([uid, aid]) => {
|
||||
if (num--) {
|
||||
await bili.shareVideo(uid, aid)
|
||||
await utils.delay(random_dynamic_wait)
|
||||
return false
|
||||
await utils.try_for_each(
|
||||
utils.shuffle(dynamics).slice(0, num),
|
||||
async (dynamic) => {
|
||||
await utils.delay(random_dynamic_wait)
|
||||
if (dynamic instanceof Array && dynamic.length === 2 && typeof dynamic[0] === "number") {
|
||||
return await bili.shareVideo(...dynamic)
|
||||
} else {
|
||||
return true
|
||||
return await bili.createDynamic(dynamic)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
module.exports = { randomDynamic }
|
||||
+4
-2
@@ -10,8 +10,10 @@ const { log } = utils;
|
||||
async function createRandomDynamic(num) {
|
||||
if (config.create_dy) {
|
||||
log.info('随机动态', `准备创建${num}条随机动态`);
|
||||
const Dynamic = await Searcher.checkAllDynamic(global_var.get("myUID"), 1);
|
||||
if ((Dynamic.allModifyDynamicResArray[0] || { type: 0 }).type === 1) {
|
||||
const
|
||||
{ allModifyDynamicResArray } = await Searcher.checkAllDynamic(global_var.get("myUID"), 1),
|
||||
{ type, orig_type } = allModifyDynamicResArray[0] || {};
|
||||
if (type === 1 && orig_type !== 8) {
|
||||
await randomDynamic(num)
|
||||
} else {
|
||||
log.info('随机动态', '已有非抽奖动态故无需创建');
|
||||
|
||||
+16
-3
@@ -453,7 +453,7 @@ const bili_client = {
|
||||
/**
|
||||
* 搜索专栏
|
||||
* @param {string} keyword
|
||||
* @return {Promise<Array<number>>}
|
||||
* @return {Promise<Array<{pub_time: number, id: number}>>}
|
||||
*/
|
||||
async searchArticlesByKeyword(keyword) {
|
||||
const
|
||||
@@ -471,7 +471,12 @@ const bili_client = {
|
||||
let cv_arr = [];
|
||||
try {
|
||||
log.info('搜索专栏', '成功 关键词: ' + keyword);
|
||||
cv_arr = res.data.result.map(it => it.id);
|
||||
cv_arr = res.data.result.map(it => {
|
||||
return {
|
||||
pub_time: it.pub_time,
|
||||
id: it.id
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
log.error('搜索专栏', '失败 原因:\n' + responseText);
|
||||
cv_arr = [];
|
||||
@@ -743,6 +748,9 @@ const bili_client = {
|
||||
} else if (res.code === 1101004) {
|
||||
log.warn('转发动态', '该动态不能转发分享');
|
||||
return 0;
|
||||
} else if (res.code === 2201116) {
|
||||
log.warn('转发动态', '请求数据发生错误,请刷新或稍后重试');
|
||||
return 0;
|
||||
} else {
|
||||
log.error('转发动态', `转发动态失败\n${responseText}`);
|
||||
return 1;
|
||||
@@ -755,7 +763,7 @@ const bili_client = {
|
||||
* @property {number} img_height
|
||||
* 发布一条动态
|
||||
* @param { string | Picture[] } content
|
||||
* @return {Promise<void>}
|
||||
* @return {Promise<boolean>} isError true
|
||||
*/
|
||||
async createDynamic(content) {
|
||||
let
|
||||
@@ -785,8 +793,10 @@ const bili_client = {
|
||||
});
|
||||
if (/^{"code":0/.test(responseText)) {
|
||||
log.info('发布动态', `成功创建一条随机内容的动态\n${JSON.stringify(content)}\n`);
|
||||
return false
|
||||
} else {
|
||||
log.error('发布动态', `发布动态失败\n${JSON.stringify(content)}\n${responseText}`);
|
||||
return true
|
||||
}
|
||||
},
|
||||
/**
|
||||
@@ -815,6 +825,7 @@ const bili_client = {
|
||||
* 分享视频
|
||||
* @param {number} uid
|
||||
* @param {number} aid
|
||||
* @return {boolean} isError true
|
||||
*/
|
||||
async shareVideo(uid, aid) {
|
||||
const responseText = await post({
|
||||
@@ -831,8 +842,10 @@ const bili_client = {
|
||||
});
|
||||
if (/^{"code":0/.test(responseText)) {
|
||||
log.info('转发视频', `成功转发视频(av${aid})`);
|
||||
return false
|
||||
} else {
|
||||
log.error('转发视频', `转发失败\n${responseText}`);
|
||||
return true
|
||||
}
|
||||
},
|
||||
/**
|
||||
|
||||
@@ -109,6 +109,11 @@ module.exports = Object.freeze({
|
||||
*/
|
||||
article_scan_page: 3,
|
||||
|
||||
/**
|
||||
* - 专栏创建时间距离现在的最大天数
|
||||
*/
|
||||
article_create_time: 7,
|
||||
|
||||
/**
|
||||
* - 不检查专栏是否看过,若选择检查可以提高检测效率
|
||||
* - 默认false(检查)
|
||||
@@ -278,6 +283,11 @@ module.exports = Object.freeze({
|
||||
"中奖|获得|填写|写上|提供|收货地址|支付宝账号|码|大会员"
|
||||
],
|
||||
|
||||
/**
|
||||
* - 获取私信页数
|
||||
*/
|
||||
check_session_pages: 16,
|
||||
|
||||
/**
|
||||
* - 清理白名单uid或dyid
|
||||
* - 英文逗号分隔 如: 1,2,3
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lottery-auto-script",
|
||||
"version": "2.3.2",
|
||||
"version": "2.3.6",
|
||||
"description": "自动参与B站动态抽奖",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -52,4 +52,4 @@
|
||||
"chalk": "^4.1.2",
|
||||
"nodemailer": "^6.7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user