diff --git a/.gitignore b/.gitignore index c889dfb..908ff68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ node_modules/ dyids/ dist/ -lib/dyid*.txt -dyid.zip env.js my_config.js \ No newline at end of file diff --git a/README.md b/README.md index be985de..dd92034 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - [获取COOKIE](#获取cookie) - [本地运行](#本地运行) - [可执行文件](#可执行文件) - - [搭建运行环境](#搭建运行环境) + - [以源码方式运行](#以源码方式运行) - [Windows](#windows) - [Linux](#linux) - [Docker](#docker) @@ -38,7 +38,7 @@ Chrome浏览器: 2. 进入Application找到Cookies栏中的SESSDATA将HttpOnly选项**取消**勾选 - (此步骤是为了方便后续采用JS获取Cookies) + (此步骤是为了方便后续采用JS获取Cookies,获取完毕后应再次勾选) ![取消httponly](doc/pic/getCookies.png) @@ -66,20 +66,19 @@ Chrome浏览器: ↓↓ ### 本地运行 -设置环境变量中的cookie和推送相关参数 -具体操作详见[env.example.js](env.example.js)文件内注释 #### 可执行文件 -在当前目录下[打开终端](https://cn.bing.com/search?q=%E5%A6%82%E4%BD%95%E5%9C%A8%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%89%93%E5%BC%80%E7%BB%88%E7%AB%AF)运行内部的可执行文件即可 +1. [[下载](https://github.com/shanmiteko/LotteryAutoScript/releases)|[cnpmjs镜像下载](https://github.com.cnpmjs.org/shanmiteko/LotteryAutoScript/releases)|[Fastgit镜像下载](https://hub.fastgit.org/shanmiteko/LotteryAutoScript/releases)]压缩包并解压 + ``` + env.js + lottery.exe + my_config.js + ``` +2. `env.js`中填入`COOKIE`和推送参数 +3. `my_config.js`中自定义设置 +4. 在当前目录下打开终端运行可执行文件`lottery` -[下载](https://github.com/shanmiteko/LotteryAutoScript/releases) - -[cnpmjs镜像下载](https://github.com.cnpmjs.org/shanmiteko/LotteryAutoScript/releases) - -[Fastgit镜像下载](https://hub.fastgit.org/shanmiteko/LotteryAutoScript/releases) - - -#### 搭建运行环境 +#### 以源码方式运行
@@ -234,4 +233,6 @@ rm -rf lottery/ ---------------------------------------- ## 设置说明 +详见[env.example.js](./env.example.js)文件内部注释 + 详见[my_config.example.js](./my_config.example.js)文件内部注释 \ No newline at end of file diff --git a/lib/Monitor.js b/lib/Monitor.js index 6ccb071..201674b 100644 --- a/lib/Monitor.js +++ b/lib/Monitor.js @@ -173,7 +173,7 @@ class Monitor extends Public { const isFollowed = (new RegExp(uid)).test(self.attentionList); if (only_followed && !isFollowed) continue; /* 判断是否转发过 */ - const isRelay = await MyStorage.searchDyid(dyid); + const isRelayed = await MyStorage.searchDyid(dyid); /* 获取黑名单并去重合并 */ const { blacklist: remote_blacklist } = GlobalVar.get("remoteconfig"); const new_blacklist = remote_blacklist ? @@ -182,7 +182,7 @@ class Monitor extends Public { if ((new RegExp(dyid + '|' + uid)).test(new_blacklist)) continue; onelotteryinfo.uid = [] /**初始化待关注列表 */ if (!isFollowed) onelotteryinfo.uid.push(uid); - if (!isRelay) { + if (!isRelayed) { onelotteryinfo.dyid = dyid; let RandomStr = Base.getRandomOne(config.relay); let new_ctrl = []; diff --git a/lib/Public.js b/lib/Public.js index 1989504..8484ae2 100644 --- a/lib/Public.js +++ b/lib/Public.js @@ -86,13 +86,12 @@ class Public { */ modifyDynamicRes(res) { const strToJson = Base.strToJson, - jsonRes = strToJson(res), - { data } = jsonRes; - if (jsonRes.code !== 0) { - Base.tooltip.warn('获取动态数据出错,可能是访问太频繁'); + { data, code } = strToJson(res); + if (code !== 0) { + Base.tooltip.warn('获取动态数据出错,可能是访问太频繁 \n' + res); return null; } - /* 字符串防止损失精度 */ + /* 字符串offset防止损失精度 */ const offset = typeof data.offset === 'string' ? data.offset : /(?<=next_offset":)[0-9]*/.exec(res)[0] , next = { has_more: data.has_more, @@ -108,7 +107,7 @@ class Public { /** * 空动态无cards */ - const Cards = data.cards; + const Cards = data.cards || []; Cards.forEach(onecard => { /**临时储存单个动态中的信息 */ let obj = {}; @@ -116,38 +115,56 @@ class Public { , { info, card: user_profile_card } = desc.user_profile , { official_verify } = user_profile_card , cardToJson = strToJson(card); - obj.uid = info.uid; /* 转发者的UID */ - obj.uname = info.uname;/* 转发者的name */ - obj.official_verify = official_verify.type > -1 ? true : false; /* 是否官方号 */ - obj.createtime = desc.timestamp /* 动态的ts10 */ - obj.type = desc.type /* 动态类型 */ - obj.rid_str = desc.rid_str.length > 12 ? desc.dynamic_id_str : desc.rid_str;/* 用于发送评论 */ - obj.orig_type = desc.orig_type /* 源动态类型 */ - obj.dynamic_id = desc.dynamic_id_str; /* 转发者的动态ID !!!!此为大数需使用字符串值,不然JSON.parse()会有丢失精度 */ + /* 转发者的UID */ + obj.uid = info.uid; + /* 转发者的name */ + obj.uname = info.uname; + /* 是否官方号 */ + obj.official_verify = official_verify.type > -1 ? true : false; + /* 动态的ts10 */ + obj.createtime = desc.timestamp + /* 动态类型 */ + obj.type = desc.type + /* 用于发送评论 */ + obj.rid_str = desc.rid_str.length > 12 ? desc.dynamic_id_str : desc.rid_str; + /* 源动态类型 */ + obj.orig_type = desc.orig_type + /* 转发者的动态ID !!!!此为大数需使用字符串值,不然JSON.parse()会有丢失精度 */ + obj.dynamic_id = desc.dynamic_id_str; const { extension, extend_json } = onecard; - obj.ctrl = (typeof extend_json === 'undefined') ? [] : strToJson(extend_json).ctrl || []; /* 定位@信息 */ - obj.hasOfficialLottery = (typeof extension === 'undefined') ? false : typeof extension.lott === 'undefined' ? false : true; /* 是否有官方抽奖 */ + /* 定位@信息 */ + 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 || ''; /* 转发者的描述 */ + /* 转发者的描述 */ + obj.description = item.content || item.description || ''; if (obj.type === 1) { - obj.origin_uid = desc.origin.uid; /* 被转发者的UID */ - obj.origin_rid_str = desc.origin.rid_str.length > 12 ? desc.origin.dynamic_id_str : desc.origin.rid_str; /* 被转发者的rid(用于发评论) */ - obj.origin_dynamic_id = desc.orig_dy_id_str; /* 被转发者的动态的ID !!!!此为大数需使用字符串值,不然JSON.parse()会有丢失精度 */ + /* 被转发者的UID */ + obj.origin_uid = desc.origin.uid; + /* 被转发者的rid(用于发评论) */ + obj.origin_rid_str = desc.origin.rid_str.length > 12 ? desc.origin.dynamic_id_str : desc.origin.rid_str; + /* 被转发者的动态的ID !!!!此为大数需使用字符串值,不然JSON.parse()会有丢失精度 */ + obj.origin_dynamic_id = desc.orig_dy_id_str; const { origin_extension, origin_user } = cardToJson; try { + /* 是否官方号 */ obj.origin_official_verify = typeof origin_user === 'undefined' ? false : origin_user.card.official_verify.type < 0 ? - false : true; /* 是否官方号 */ - } catch (error) { + false : true; + } catch (_) { obj.origin_official_verify = false; } + /* 是否有官方抽奖 */ obj.origin_hasOfficialLottery = typeof origin_extension === 'undefined' ? false : typeof origin_extension.lott === 'undefined' ? - false : true; /* 是否有官方抽奖 */ + false : true; const origin = cardToJson.origin || '{}'; const { user, item } = strToJson(origin); - obj.origin_uname = typeof user === 'undefined' ? '' : user.name || user.uname || ''; /* 被转发者的name */ - obj.origin_description = typeof item === 'undefined' ? '' : item.content || item.description || ''; /* 被转发者的描述 */ + /* 被转发者的name */ + obj.origin_uname = typeof user === 'undefined' ? '' : user.name || user.uname || ''; + /* 被转发者的描述 */ + obj.origin_description = typeof item === 'undefined' ? '' : item.content || item.description || ''; } array.push(obj); }); @@ -245,4 +262,5 @@ class Public { } } -module.exports = Public; + +module.exports = Public; \ No newline at end of file diff --git a/main.js b/main.js index 6e400a3..3b36b79 100644 --- a/main.js +++ b/main.js @@ -39,6 +39,7 @@ async function main() { 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('开始参与抽奖'); @@ -55,9 +56,16 @@ async function main() { 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(`Usage: lottery-in-bili [OPTIONS]`) - console.log(`错误OPTIONS: ${mode} 正确OPTIONS: start,check,clear`); + console.log(`错误: 提供了错误的[OPTIONS] -> ${mode}\n`) + console.log(help_msg); } } } else { @@ -85,6 +93,7 @@ async function main() { /**OPTIONS */ process.env.lottery_mode = process.argv[2] await main(); + tooltip.log('5秒后自动退出'); await delay(5 * 1000); process.exit(0) })() \ No newline at end of file diff --git a/my_config.example.js b/my_config.example.js index a6ecc14..516e34a 100644 --- a/my_config.example.js +++ b/my_config.example.js @@ -207,5 +207,4 @@ module.exports = { config_1: {}, config_2: {}, config_3: {} -} - +} \ No newline at end of file diff --git a/script/pkg/pkg.ps1 b/script/pkg/pkg.ps1 index a2e731c..bbe0201 100644 --- a/script/pkg/pkg.ps1 +++ b/script/pkg/pkg.ps1 @@ -6,33 +6,33 @@ $ENV_FILE = "env.js" $TARGET_DIR = ".\dist" -$WIN_BIN = "lottery-in-bili-win.exe" -$LINUX_BIN = "lottery-in-bili-linux" -$MACOS_BIN = "lottery-in-bili-macos" - -$WIN_X64 = "nlts-win-x64" -$LINUX_X64 = "nlts-linux-x64" -$MACOS_X64 = "nlts-macos-x64" - -$MAP = @{ $WIN_X64 = $WIN_BIN; $LINUX_X64 = $LINUX_BIN; $MACOS_X64 = $MACOS_BIN} +$TRIARR = @( + @("lottery-in-bili-win.exe", "lottery.exe", "nlts-win-x64"), + @("lottery-in-bili-linux", "lottery", "nlts-linux-x64"), + @("lottery-in-bili-macos", "lottery", "nlts-macos-x64") +) Copy-Item -Path $TEMPLATE_ENV_FILE -Destination $TARGET_DIR -Force Copy-Item -Path $TEMPLATE_CONFIG_FILE -Destination $TARGET_DIR -Force Set-Location -Path $TARGET_DIR +# 重命名文件 Move-Item -Path $TEMPLATE_ENV_FILE -Destination $ENV_FILE -Force Move-Item -Path $TEMPLATE_CONFIG_FILE -Destination $CONFIG_FILE -Force -foreach($X64 in $MAP.Keys) { - $BIN = $MAP[$X64] - if (!(Test-Path $X64 -PathType Container)) { - New-Item -ItemType Directory -Force -Path $X64 - } - Move-Item -Path $BIN -Destination $X64 -Force - Copy-Item -Path $ENV_FILE -Destination $X64 -Force - Copy-Item -Path $CONFIG_FILE -Destination $X64 -Force - Compress-Archive -Path $X64 -DestinationPath $X64 -Force +foreach ($TRI in $TRIARR) { + $PROTO_BIN,$BIN,$DIR = $TRI + + New-Item -ItemType Directory -Force -Path $DIR + + Move-Item -Path $PROTO_BIN -Destination $BIN -Force + + Move-Item -Path $BIN -Destination $DIR -Force + Copy-Item -Path $ENV_FILE -Destination $DIR -Force + Copy-Item -Path $CONFIG_FILE -Destination $DIR -Force + + Compress-Archive -Path $DIR -DestinationPath "$($DIR)-$(Get-Date -Format "yyyyMMd")" -Force } Remove-Item -Path $ENV_FILE