Compare commits

...
13 Commits
Author SHA1 Message Date
shanmite c85ea6bc77 docs: 更新CHANGELOG 2021-11-29 15:49:16 +08:00
shanmite eae72dbdd7 feat: minfollower填0可关闭本地粉丝数筛选 2021-11-28 21:33:15 +08:00
shanmite 111602f248 perf: 日志显示是否转发过 2021-11-28 20:04:45 +08:00
shanmite d366e252e9 fix: 转发动态时非限制性错误码(#72)
```json
{
  "code":2201116,
  "msg":"请求数据发生错误,请刷新或稍后重试",
  "message":"请求数据发生错误,请刷新或稍后重试",
  "data":{}
}
```
2021-11-27 15:14:25 +08:00
shanmite 40dcc5f879 docs: 更新CHANGELOG 2021-11-17 16:49:04 +08:00
shanmite 8c0d96afc6 refactor: 检测是否已经发送过随机动态(#71)
* 优化随机动态发送逻辑
* 修复随机动态的部分bug
2021-11-17 16:42:17 +08:00
shanmite 09b6db4f8b feat: 新增设置check_session_pages(#66)
获取私信页数
- check_session_pages
- 默认16
2021-11-17 15:36:54 +08:00
shanmite 24e16ed8bc fix: 多帐号使用默认设置初始化(#70) 2021-11-17 15:20:43 +08:00
shanmite fabe9f7d6e docs: 更新CHANGELOG 2021-11-09 19:13:32 +08:00
jkluio78andshanmite 1962d97bc1 fix: 过滤专栏时间失效(#67) 2021-11-09 19:04:07 +08:00
shanmite c43ab13790 docs: 更新CHANGELOG 2021-11-08 16:04:13 +08:00
shanmite 11625b3850 feat: 检索专栏时能够根据发布时间进行过滤(#65) 2021-11-08 15:40:10 +08:00
shanmite 8c7a6d13d6 fix: 多帐号设置未更新
未填写对应的config_n导致沿用之前的设置
2021-11-08 11:31:43 +08:00
10 changed files with 146 additions and 50 deletions
+42
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
}
},
/**
+10
View File
@@ -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
View File
@@ -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"
}
}
}