Compare commits

...
3 Commits
Author SHA1 Message Date
shanmite aa9cb68c81 docs: 更新CHANGELOG 2022-01-16 20:18:13 +08:00
shanmite dd1b1db76a feat(update): 优先使用代理更新失败时切回去 2022-01-16 20:12:35 +08:00
shanmite 86e6b7dbc9 feat: 重命名设置sneaktower(#104) 2022-01-16 16:58:49 +08:00
8 changed files with 80 additions and 66 deletions
+6
View File
@@ -1,5 +1,11 @@
<!-- markdownlint-disable MD036 MD024-->
# CHANGELOG
## 主要变化(2.4.7)
* dd1b1db feat(update): 优先使用代理更新失败时切回去
* 86e6b7d feat: 重命名设置`sneaktower`(#104)
_如果之前版本小于上一版本,请查看[CHANGELOG](CHANGELOG.md)变更说明_
## 主要变化(2.4.6)
* 043fee2 feat: 新增设置`sneaktopic`(#104)
* ae34c69 feat: 新增设置`is_repost_then_chat`(#103)
+12 -16
View File
@@ -244,7 +244,7 @@ class Monitor extends Searcher {
/** 所有抽奖信息 */
let alllotteryinfo = [];
const
{ check_if_duplicated, set_lottery_info_url, key_words, model, chatmodel, block_dynamic_type, max_create_time, is_imitator, only_followed, at_users, blockword, blacklist, use_public_blacklist } = config,
{ check_if_duplicated, set_lottery_info_url, sneaktower, key_words, model, chatmodel, block_dynamic_type, max_create_time, is_imitator, only_followed, at_users, blockword, blacklist, use_public_blacklist } = config,
now_ts = Date.now() / 1000;
/**
@@ -308,21 +308,17 @@ class Monitor extends Searcher {
log.debug('正在筛选的动态信息', lottery_info);
switch (lottery_info_type) {
case 'sneaktopic':
log.info("筛选动态", `偷塔模式(https://t.bilibili.com/${dyid})`)
break;
default:
/* 遇到转发过就退出 */
if (
((!check_if_duplicated || check_if_duplicated === 2)
&& is_liked)
|| ((check_if_duplicated === 1 || check_if_duplicated === 2)
&& dyids_map.get(dyid))
) {
log.info("筛选动态", `已转发(https://t.bilibili.com/${dyid})`)
return false
}
if (lottery_info_type.startsWith('sneak') && sneaktower) {
log.info("筛选动态", `偷塔模式不检查是否已转发(https://t.bilibili.com/${dyid})`)
} else {
/* 遇到转发过就退出 */
if (
((!check_if_duplicated || check_if_duplicated === 2) && is_liked)
|| ((check_if_duplicated === 1 || check_if_duplicated === 2) && dyids_map.get(dyid))
) {
log.info("筛选动态", `已转发(https://t.bilibili.com/${dyid})`)
return false
}
}
/* 超过指定时间退出 */
+1 -1
View File
@@ -82,7 +82,7 @@ const config = {
* 偷塔模式不检查是否重复转发
* * 偷塔模式: 临近开奖时参与抽奖
*/
sneaktopic: true,
sneaktower: true,
/**
* 屏蔽动态类型
+54 -43
View File
@@ -2,13 +2,25 @@ const { send } = require('./net/http')
const { strToJson, download, try_for_each } = require('./utils')
const { version, checkVersion, log } = require('./utils')
const
platform = new Map([
['win32', 'win'],
['linux', 'linux'],
['darwin', 'macos']
]).get(process.platform),
arch = new Map([
['x64', 'x64'],
['arm', 'armv7'],
['arm64', 'arm64']
]).get(process.arch);
/**
* 获取下载链接
* @param {string} owner
* @param {string} repo
* @returns {Promise<{ download_url: string[], text: string }>}
* @returns {Promise<{ tag_name:string, assets:Object, text:string }>}
*/
function getLatestReleaseDownloadUrl(owner, repo) {
function getLatestRelease(owner, repo) {
return new Promise((resolve, reject) => {
send({
url: `https://api.github.com/repos/${owner}/${repo}/releases/latest`,
@@ -19,37 +31,9 @@ function getLatestReleaseDownloadUrl(owner, repo) {
retry: false
},
success: ({ body }) => {
const { tag_name, assets, body: text } = strToJson(body)
if (tag_name) {
if (checkVersion(version) < checkVersion(tag_name)) {
const platform = new Map([
['win32', 'win'],
['linux', 'linux'],
['darwin', 'macos']
]).get(process.platform)
const arch = new Map([
['x64', 'x64'],
['arm', 'armv7'],
['arm64', 'arm64']
]).get(process.arch)
if (platform && arch) {
try {
const download_url = assets
.filter(({ name }) => name.includes(platform) && name.includes(arch))
.map(({ browser_download_url }) => browser_download_url)
if (!download_url.length) {
reject(`未找到能在此平台(${process.platform})-(${process.arch})上运行的版本`)
}
resolve({ download_url, text })
} catch (err) {
reject(err)
}
} else {
reject(`未找到能在此平台(${process.platform})-(${process.arch})上运行的版本`)
}
} else {
reject('当前已是最新版本')
}
const release = strToJson(body);
if (release.tag_name) {
resolve(release)
} else {
reject(body)
}
@@ -61,21 +45,48 @@ function getLatestReleaseDownloadUrl(owner, repo) {
});
}
/**
* @param {string} releases
* @return {boolean}
*/
function checkPlatform(releases) {
return releases.includes(platform)
&& releases.includes(arch)
}
/**
* 半自动更新
*/
async function update() {
try {
const { download_url, text } = await getLatestReleaseDownloadUrl('shanmiteko', 'LotteryAutoScript')
await try_for_each(download_url.entries(), async ([i, url]) => {
let proxy_url = new URL(url)
proxy_url.host = 'download.fastgit.org'
await download(proxy_url.href, `latest_version${i}.zip`)
return false
})
log.info('自动下载', '成功下载到当前目录')
log.info('更新说明', '\n' + text + '\n')
const { tag_name, assets, body: text } = await getLatestRelease('shanmiteko', 'LotteryAutoScript')
if (checkVersion(version) < checkVersion(tag_name)) {
const download_url = assets
.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`)
.catch(async err => {
log.error('自动下载', err)
proxy_url.host = 'github.com'
log.warn('自动下载', `使用原始链接github.com`)
await download(proxy_url.href, `latest_version${i}.zip`)
})
return false
})
log.info('自动下载', '成功下载到当前目录')
log.info('更新说明', '\n' + text + '\n')
} else {
throw `未找到能在此平台(${process.platform})-(${process.arch})上运行的版本,建议以源码运行`
}
} else {
throw '当前已是最新版本'
}
} catch (error) {
log.error('更新脚本', error)
}
+4 -3
View File
@@ -248,12 +248,13 @@ const utils = {
redirect: true,
retry: false
},
success: ({ resStream }) => {
success: ({ headers, resStream }) => {
const total_len = Number(headers["content-length"]);
let recv_length = 0;
const wtbs = fs.createWriteStream(file_name);
resStream.on('data', chuck => {
recv_length += chuck.length
utils.log.proPrint(`已收到:${recv_length} Bytes`)
utils.log.proPrint(total_len ? `已下载${(recv_length * 100 / total_len + '').slice(0, 5)}%` : `已收到:${recv_length} Bytes`)
})
resStream.pipe(wtbs)
wtbs.on('finish', () => {
@@ -261,7 +262,7 @@ const utils = {
resolve()
}).on('error', error => {
wtbs.destroy()
resolve(error)
reject(error)
})
},
failure: error => {
+1 -1
View File
@@ -88,7 +88,7 @@ async function main() {
}
} else {
log.error('Cookie已失效', '切换账号时不要点击退出账号而应直接删除Cookie退出')
return ''
return
}
} else {
return '请查看README文件, 在env.js指定位置填入cookie'
+1 -1
View File
@@ -96,7 +96,7 @@ module.exports = Object.freeze({
* 偷塔模式不检查是否重复转发
* * 偷塔模式: 临近开奖时参与抽奖
*/
sneaktopic: true,
sneaktower: true,
/**
* 屏蔽动态类型
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "lottery-auto-script",
"version": "2.4.6",
"version": "2.4.7",
"description": "自动参与B站动态抽奖",
"main": "main.js",
"scripts": {