Compare commits

...
8 Commits
Author SHA1 Message Date
shanmite 26ae391eee fix: 私信检测(#9) 2021-08-04 13:41:00 +08:00
shanmite a1b055b9de chore: 更新issue_template 2021-07-31 10:59:52 +08:00
shanmite d2d9d31ebf fix: 点赞失败(#7)
feat: 新增设置
2021-07-30 17:24:51 +08:00
shanmite fdee933ca4 pref: 对将要转发的动态洗牌乱序
防止被看出是抽奖号
2021-07-29 22:38:32 +08:00
shanmite 53ae976caf fix: 多账号出错回传错误 2021-07-29 20:18:00 +08:00
shanmite de88467c03 fix: 专栏验重 2021-07-29 13:47:11 +08:00
shanmite 6bbbfbb521 pref: 优化清理动态的使用体验 2021-07-29 12:57:14 +08:00
shanmite e7ab5790cd fix: 两级解构时第一级为undefined 2021-07-28 22:03:13 +08:00
20 changed files with 212 additions and 168 deletions
+4 -2
View File
@@ -7,5 +7,7 @@ assignees: ''
---
### 清晰而简明地描述
在此写下你的描述
**清晰而简明地描述**
- [x] 你确定提出的功能脚本的确没有
<!-- 在此写下你的描述 -->
+31 -17
View File
@@ -1,33 +1,47 @@
---
name: Bug 反馈
about: 提出你遇到的问题, 提问之前请检索问题是否重复
about: 提出你遇到的问题
title: ''
labels: ''
assignees: ''
---
### 在反馈bug之前,请确保你已经认真阅读了本项目的README和脚本的内置说明
**描述bug**
简要描述所遇到的bug
**为避免无效问题和冗余问题,提问前请确认**
- [x] 你确定搜索引擎不能解决你的问题
- [x] 你确定提供的Readme文档和Release说明不能解决你的问题
- [x] 你确定已有的issue不能解决你的问题
- [x] 你确定issue的title能简明的描述你的问题
**描述Bug**
<!-- 简要而清晰的描述你所遇到的bug -->
**重现Bug**
<!-- 说明您在进行了怎样的操作后出现了Bug -->
**重现bug**
说明您在进行了怎样的操作后出现了bug
1. xxx
2. xxx
**预期行为**
简要描述进行以上操作后预期的脚本行为
**预期行为**
**截图**
如果可以,请提供有关截图
<!-- 简要描述进行以上操作后预期的脚本行为 -->
**运行日志**
控制台日志。
**截图**
**使用环境:**
- Github Actions中
- 本地运行
<!-- 如果可以,请提供尽可能多的相关截图 -->
**其他**
若您有其他想要补充的内容,请在此说明
**运行日志**
<!-- 控制台日志 -->
**使用环境:**
- 操作系统
- NodeJs版本
- 脚本版本
**其他**
<!-- 若您有其他想要补充的内容,请在此说明 -->
+6 -5
View File
@@ -76,12 +76,13 @@ Chrome浏览器:
lottery.exe 可执行文件
my_config.js 自定义设置文件
```
2. `env.js`中填入`COOKIE`和推送参数
3. `my_config.js`中自定义设置
4. 在当前目录下打开终端运行可执行文件`lottery`
5. 输入`lottery start`启动抽奖|`lottery check`检测中奖|`lottery clear`清理动态
2. 用记事本或其他编辑器修改`env.js`和`my_config.js`文件(右键选择用记事本打开)
3. `env.js`中填入`COOKIE`和推送参数
4. 在`my_config.js`中自定义设置
5. 在当前目录下**打开终端**运行可执行文件`lottery`(勿直接点击`lottery`)
6. 键入`lottery start`启动抽奖|`lottery check`检测中奖|`lottery clear`清理动态
> 或者新建文本文档写入`lottery start`然后更改扩展名为.bat点击运行
6. 运行截图
7. 运行截图
![lottery_start](doc/pic/lottery_start.png)
#### 以源码方式运行
+10 -6
View File
@@ -27,6 +27,16 @@ const account_parm = {
/**
* 为防止环境变量过长, 请将多账号填在此处
* @example
* ```js
* {
* COOKIE: "",
* NUMBER: 2,
* CLEAR: true,
* WAIT: 60 * 1000,
* },
* ```
* 请按照以上格式将参数依次填写在下方
*/
const multiple_account_parm = [
{
@@ -35,12 +45,6 @@ const multiple_account_parm = [
CLEAR: true,
WAIT: 60 * 1000,
},
// {
// COOKIE: "",
// NUMBER: 2,
// CLEAR: true,
// WAIT: 60 * 1000,
// },
]
/**
+21 -19
View File
@@ -94,28 +94,25 @@ const BiliAPI = {
* @property {string} session_ts
* @property {string} content
* @property {number} timestamp
* @property {number} unread_count
* @property {number} sender_uid
* @property {number} talker_id
* @property {number} msg_seqno
*
* @typedef SessionInfo
* @property {number} has_more
* @property {SessionData[]} data
*
* @param {number} session_type 1 已关注 2 未关注
* @param {number} session_type 1 已关注 2 未关注 3 应援团
* @param {string} [ts_16]
* @returns {Promise<SessionInfo>}
*/
async getSessionInfo(session_type, ts_16 = '') {
return new Promise((resolve) => {
Ajax.post({
Ajax.get({
url: 'https://api.vc.bilibili.com/session_svr/v1/session_svr/get_sessions',
data: {
queryStringsObj: {
session_type,
group_fold: 1,
unfollow_fold: 1,
sort_rule: 2,
build: 0,
mobi_app: 'web',
end_ts: ts_16,
},
success: responseText => {
@@ -127,10 +124,13 @@ const BiliAPI = {
const has_more = res.data.has_more;
const data = sessions.map(session => {
const { session_ts, last_msg = {}, unread_count, talker_id } = session;
const { content = '', timestamp = 0, sender_uid = 0 } = last_msg;
return { session_ts, content, timestamp, sender_uid, talker_id: unread_count ? talker_id : undefined }
const { content = '', timestamp = 0, sender_uid = 0, msg_seqno } = last_msg;
return { session_ts, content, timestamp, sender_uid, unread_count, talker_id, msg_seqno }
})
resolve({ has_more, data })
} else if (res.code === 2) {
log.error('获取私信', `API抽风...请再次尝试`);
resolve({ has_more: 0, data: [] });
} else {
log.error('获取私信', `失败\n${responseText}`);
resolve({ has_more: 0, data: [] });
@@ -164,17 +164,19 @@ const BiliAPI = {
/**
* 私信已读
* @param {number} talker_id
* @param {number} session_type
* @param {number} msg_seqno
*/
updateSessionStatus(talker_id) {
updateSessionStatus(talker_id, session_type, msg_seqno) {
Ajax.post({
url: 'https://api.vc.bilibili.com/session_svr/v1/session_svr/update_ack',
retry: false,
data: {
talker_id,
session_type: 1,
ack_seqno: 1,
mobi_app: "web",
csrf_token: GlobalVar.get("csrf")
session_type,
ack_seqno: msg_seqno,
csrf_token: GlobalVar.get("csrf"),
csrf: GlobalVar.get("csrf")
},
success: responseText => {
let res = strToJson(responseText);
@@ -582,10 +584,10 @@ const BiliAPI = {
success: responseText => {
const res = strToJson(responseText);
if (res.code === 0) {
log.info('自动取关', '取关成功');
log.info('自动取关', `取关成功(${uid})`);
resolve(true)
} else {
log.error('自动取关', `取关失败\n${responseText}`);
log.error('自动取关', `取关失败(${uid})\n${responseText}`);
resolve(false)
}
}
@@ -722,10 +724,10 @@ const BiliAPI = {
retry: false,
success: responseText => {
if (/^{"code":0/.test(responseText)) {
log.info('删除动态', '成功删除一条动态');
log.info('删除动态', `成功删除一条动态(${dyid})`);
resolve(true);
} else {
log.error('删除动态', `删除动态失败\n${responseText}`);
log.error('删除动态', `删除动态失败(${dyid})\n${responseText}`);
resolve(false);
}
}
+8 -12
View File
@@ -62,15 +62,12 @@ class Monitor extends Public {
eventBus.emit('Turn_on_the_Monitor')
break
case 31:
eventBus.emit('Turn_on_the_Monitor')
break
case 41:
eventBus.emit('Turn_off_the_Monitor', '转发失败')
break
case 51:
case 41:
eventBus.emit('Turn_off_the_Monitor', '获取开奖时间失败')
break
case 61:
case 51:
eventBus.emit('Turn_off_the_Monitor', '获取关注数失败')
break
default:
@@ -89,13 +86,13 @@ class Monitor extends Public {
log.info('筛选动态', `筛选完毕(${len})`);
if (len) {
for (const Lottery of allLottery) {
for (const Lottery of Util.shuffle(allLottery)) {
let status = 0;
if (Lottery.isOfficialLottery) {
let { ts } = await BiliAPI.getLotteryNotice(Lottery.dyid);
const ts_10 = Date.now() / 1000;
if (ts < 0) {
return 51
return 41
}
if (ts < ts_10) {
log.info('过滤', '已过开奖时间')
@@ -110,7 +107,7 @@ class Monitor extends Public {
} else if (Lottery.uid[0]) {
const followerNum = await BiliAPI.getUserInfo(Lottery.uid[0]);
if (followerNum < 0) {
return 61
return 51
}
if (followerNum < config.minfollower) {
log.info('过滤', `粉丝数(${followerNum})小于指定数量`)
@@ -314,8 +311,7 @@ class Monitor extends Public {
* 11 - 评论错误
* 21 - 关注错误
* 22 - 关注异常
* 31 - 点赞失败
* 41 - 转发失败
* 31 - 转发失败
*/
async go(option) {
log.debug('正在转发的动态信息', option);
@@ -356,10 +352,10 @@ class Monitor extends Public {
}
/* 点赞 */
if (await BiliAPI.autolike(dyid)) return 31;
await BiliAPI.autolike(dyid)
/* 转发 */
if (await BiliAPI.autoRelay(GlobalVar.get("myUID"), dyid, relay_chat, ctrl)) return 41;
if (await BiliAPI.autoRelay(GlobalVar.get("myUID"), dyid, relay_chat, ctrl)) return 31;
return 0
}
+12 -14
View File
@@ -86,9 +86,8 @@ function parseDynamicCard(dynamic_detail_card) {
*/
function modifyDynamicRes(res) {
const
strToJson = Util.strToJson
, { data, code } = strToJson(res)
, { cards = [], has_more, offset } = data;
{ data = {}, code } = Util.strToJson(res),
{ cards = [], has_more, offset } = data;
if (code !== 0) {
log.error('处理动态数据', '获取动态数据出错,可能是访问太频繁 \n' + res);
@@ -144,7 +143,7 @@ class Public {
*/
/**
* 检查指定用户的所有的动态信息
* @param {string} UID 指定的用户UID
* @param {number} hostuid 指定的用户UID
* @param {number} pages 读取页数
* @param {number} time 时延
* @param {string} [offset] 默认'0'
@@ -189,19 +188,18 @@ class Public {
if (nextinfo.has_more === 0) {
offset = nextinfo.next_offset;
log.info('检查所有动态', `成功读取${i + 1}页信息(已经是最后一页了故无法读取更多)`);
log.info('检查所有动态', `已经是最后一页了故无法读取更多`);
break;
} else {
/**合并 */
allModifyDynamicResArray.push.apply(allModifyDynamicResArray, mDRArry);
log.info('检查所有动态', `开始读取第${i + 2}页动态信息`)
offset = nextinfo.next_offset;
}
await Util.delay(time);
}
log.info('检查所有动态', `${pages}页信息读取完成`)
log.info('检查所有动态', `${pages}页信息读取完成`)
return ({ allModifyDynamicResArray, offset });
}
@@ -301,20 +299,20 @@ class Public {
const
content = await BiliAPI.getOneArticleByCv(cv),
dyids = content.match(/(?<=t.bilibili.com\/)[0-9]+/g) || [],
dyids_set = [...new Set(dyids)],
/**判断此专栏是否查看过的权重 */
weight = dyids.length / 2;
let { length } = dyids;
weight = dyids_set.length / 2;
let { length } = dyids_set,
_weight = 0;
log.info('获取动态', `提取专栏(${cv})中提及的dyid(${length})`)
for (const dyid of dyids) {
let _weight = 0;
for (const dyid of dyids_set) {
const isRelayed = await MyStorage.searchDyid(dyid);
if (isRelayed) {
_weight += 1;
}
if (_weight >= weight) {
log.info('获取动态', `1/2动态曾经转过,该专栏或已查看,故中止`)
log.warn('获取动态', `1/2动态曾经转过,该专栏或已查看,故中止`)
dyinfos = []
break
}
@@ -322,7 +320,7 @@ class Public {
if (!isRelayed) {
log.info('获取动态', `查看动态(${dyid})的细节 (${length--})`)
const res = await BiliAPI.getOneDynamicByDyid(dyid)
, { code, data } = Util.strToJson(res)
, { code, data = {} } = Util.strToJson(res)
, { card } = data;
if (code !== 0) {
+28 -1
View File
@@ -69,7 +69,7 @@ const Util = {
* @returns {Promise<void>}
*/
delay(time) {
Util.log.info('时延', `${time}ms`);
Util.log.info('时延', `${~~time}ms`);
return new Promise(resolve => {
setTimeout(() => {
resolve();
@@ -93,6 +93,15 @@ const Util = {
}
return c
},
/**
* 无限序列
* `[0..]`
*/
*infiniteNumber() {
for (let index = 0; ; index++) {
yield index
}
},
/**
* 随机获取数组中的一个元素
* @template T
@@ -106,6 +115,24 @@ const Util = {
}
return RandomOne
},
/**
* FisherYates shuffle洗牌
* @template T
* @param {Array<T>} array
* @return {Array<T>}
*/
shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
},
/**
* 是否有指定环境变量
* @param {string} env_name
* @returns
*/
hasEnv(env_name) {
return process.env[env_name] ? true : false;
},
+43 -27
View File
@@ -1,12 +1,9 @@
const { log, delay } = require("./Util");
const { log, delay, infiniteNumber } = require("./Util");
const BiliAPI = require("./BiliAPI");
const Public = require("./Public");
const GlobalVar = require('./GlobalVar');
const config = require("./config");
/**动态偏移量 */
let offset = '0';
/**
* 获取关注分区里的uid
* @returns { Promise<number[]> }
@@ -33,34 +30,50 @@ async function getFollowList() {
* 清理动态和关注
*/
async function clear() {
const { clear_white_list, clear_max_day, clear_remove_dynamic, clear_remove_attention, clear_remove_delay, clear_dynamic_type } = config;
const { clear_white_list, clear_max_day, clear_quick_remove_attention, clear_remove_dynamic, clear_remove_attention, clear_remove_delay, clear_dynamic_type } = config;
let success = true;
const uid_list = await getFollowList();
if (!clear_remove_dynamic && clear_remove_attention) {
if (!uid_list.length) {
log.info('清理关注', `关注为空`)
} else {
log.info('清理关注', `共有${uid_list.length}个关注`)
}
if (clear_quick_remove_attention) {
log.info('清理关注', '进入只清理关注模式')
/* 专清关注 */
for (let index = 0; index < uid_list.length; index++) {
const uid = uid_list[index];
for (const [index, uid] of uid_list.entries()) {
log.info('清理关注', `(${index}) (${uid})`)
/* 取消关注 */
success = await BiliAPI.cancelAttention(uid);
if (await BiliAPI.cancelAttention(uid)) {
log.info('清理关注', '成功')
} else {
log.error('清理关注', '失败')
break
}
/* 延时 */
await delay(clear_remove_delay);
if (!success) break;
}
} else {
const now = Date.now() / 1000;
let before_separate = [];
const MY_UID = Number(GlobalVar.get('myUID'));
for (let index = 0; ; index++) {
log.info('清理动态', `开始读取第${index + 1}页(12条)`);
const { allModifyDynamicResArray, offset: _offset } = await Public.prototype.checkAllDynamic(GlobalVar.get("myUID"), 1, 5 * 1000, offset);
offset = _offset;
for (let index = 0; index < allModifyDynamicResArray.length; index++) {
const res = allModifyDynamicResArray[index];
const { type, dynamic_id, createtime } = res;
const
Now = Date.now() / 1000,
MY_UID = Number(GlobalVar.get('myUID'));
let next_offset = '0',
before_separate = [];
for (const page of infiniteNumber()) {
log.info('清理动态', `开始读取第${page + 1}`);
const { allModifyDynamicResArray, offset } = await Public.prototype.checkAllDynamic(MY_UID, 1, 5 * 1000, next_offset);
next_offset = offset;
for (const [index, dyinfo] of allModifyDynamicResArray.entries()) {
log.info('清理动态', `${page + 1}页中的第${index + 1}个动态`)
const { type, dynamic_id, createtime } = dyinfo || {};
if (type === clear_dynamic_type) {
const { origin_uid } = res;
if ((now - createtime) > 86400 * clear_max_day) {
const
{ origin_uid } = dyinfo,
days_ago = (Now - createtime) / 86400;
if (days_ago > clear_max_day) {
/* 移除动态 */
if (dynamic_id
&& clear_remove_dynamic
@@ -77,17 +90,20 @@ async function clear() {
success = await BiliAPI.cancelAttention(origin_uid);
}
if (!success) break;
/* 延时 */
await delay(clear_remove_delay);
if (!success) break;
} else {
log.info('清理动态', `已设置跳过${clear_max_day}天 当前动态发布时间: ${~~days_ago}天前`)
log.info('清理动态', `储存用户(${origin_uid})防止误删`)
before_separate.push(origin_uid)
}
} else {
log.info('清理动态', `此动态类型为${type} != 要清理的动态类型${clear_dynamic_type}`)
}
}
log.info('清理动态', `${index + 1}页中的转发动态与关注全部处理成功`)
if (offset === '0' || !success) break;
log.info('清理动态', `${page + 1}(${allModifyDynamicResArray.length})中的转发动态与关注全部处理成功`)
if (next_offset === '0' || !success) break;
}
}
return
+17 -15
View File
@@ -78,37 +78,37 @@ async function isMe() {
desp += `${business}中@了你(${GlobalVar.get("myUID")}) \n\n`
desp += `原内容为: ${source_content} \n\n`
desp += `[直达链接](${url}) \n\n`
desp += `\n\n\n\n`
desp += `\n\n`
});
log.info('中奖检测', '--> OK');
}
if (follow_unread + unfollow_unread > 0) {
const check = async (type) => {
let session_t = '';
let max = 0;
let MySession = await BiliAPI.getSessionInfo(type)
do {
for (const index of Util.infiniteNumber()) {
for (const Session of MySession.data) {
const { content, sender_uid, session_ts, timestamp, talker_id } = Session;
const { content, sender_uid, session_ts, timestamp, unread_count, talker_id, msg_seqno } = Session;
session_t = session_ts;
if (talker_id) {
BiliAPI.updateSessionStatus(talker_id);
if (unread_count) {
BiliAPI.updateSessionStatus(talker_id, type, msg_seqno);
await Util.delay(1000);
if (/中奖|获得|填写|写上|提供|收货地址|支付宝账号|码|大会员/.test(content)) {
if (config.notice_key_words.some(it => new RegExp(it).test(content))) {
desp += `发生时间: ${new Date(timestamp * 1000).toLocaleString()} \n\n`
desp += `用户: ${sender_uid} \n\n`
desp += `私信你(${GlobalVar.get("myUID")})说: ${content} \n\n`
desp += `[直达链接](https://message.bilibili.com/#/whisper/mid${sender_uid}) \n\n`
desp += `\n\n\n\n`
desp += `\n\n`
}
}
}
if (MySession.has_more) {
if (MySession.has_more && index < 16) {
await Util.delay(3e3);
MySession = await BiliAPI.getSessionInfo(type, session_t)
} else {
break
}
max++
} while (MySession.has_more && max < 10);
}
}
if (follow_unread) {
log.info('中奖检测', '<-- 正在检查已关注者的私信')
@@ -121,7 +121,8 @@ async function isMe() {
log.info('中奖检测', '--> OK');
}
if (desp) {
log.info(desp);
desp += '中奖了别忘给脚本(https://github.com/shanmiteko/LotteryAutoScript)点一个Star哦, 赞助一两块也不是不可以‍_(:з」∠)_\n\n'
log.info('可能中奖了', desp);
await sendNotify('可能中奖了', desp);
} else {
log.info('中奖检测', "未中奖");
@@ -134,12 +135,13 @@ async function isMe() {
* @param {string} num
*/
async function checkCookie(num) {
const My_UID = GlobalVar.get("myUID");
if (await BiliAPI.getMyinfo()) {
log.info('Cookie有效性检测', '成功登录');
log.info('Cookie有效性检测', `成功登录 UID:${My_UID}`);
return true;
} else {
log.error('Cookie有效性检测', `登录失败 COOKIE${num} 已失效 UID:${GlobalVar.get("myUID")}`);
await sendNotify('动态抽奖出错-登录失败', `COOKIE${num} 已失效 UID:${GlobalVar.get("myUID")}`)
log.error('Cookie有效性检测', `登录失败 COOKIE${num} 已失效 UID:${My_UID}`);
await sendNotify('动态抽奖出错-登录失败', `COOKIE${num} 已失效 UID:${My_UID}`)
return false;
}
}
+7 -3
View File
@@ -10,7 +10,7 @@ const metainfo = [
` __/ | | | `,
` |___/ |_| `,
` `,
` v1.9.7 by shanmite`,
` v2.0.2 by shanmite`,
]
/**多账号存储 */
let multiple_account = [];
@@ -33,8 +33,12 @@ async function main() {
process.env.COOKIE = acco.COOKIE;
process.env.NUMBER = acco.NUMBER;
process.env.CLEAR = acco.CLEAR;
await main();
await delay(acco.WAIT);
const err_msg = await main();
if (err_msg) {
return err_msg
} else {
await delay(acco.WAIT);
}
}
/**多账号状态还原 */
+15 -1
View File
@@ -84,7 +84,7 @@ module.exports = {
* - 循环等待时间(指所有操作完毕后的休眠时间)
* - 单位毫秒
*/
lottery_loop_wait: 60 * 60 * 1000,
lottery_loop_wait: 0,
check_loop_wait: 0,
clear_loop_wait: 0,
@@ -177,6 +177,14 @@ module.exports = {
*/
is_exception: false,
/**
* 中奖通知关键词(满足一个就推送)
* 符合js正则表达式的字符串
*/
notice_key_words: [
"中奖", "获得", "填写", "写上", "提供", "收货地址", "支付宝账号", "码", "大会员"
],
/**
* - 清理白名单uid或dyid
* - 英文逗号分隔 如: 1,2,3
@@ -194,6 +202,12 @@ module.exports = {
*/
clear_max_day: 30,
/**
* - 快速移除关注
* - 不加判断只去除关注
*/
clear_quick_remove_attention: false,
/**
* 是否移除动态
*/
+4 -3
View File
@@ -1,4 +1,5 @@
#!/bin/bash
set -e
# 脚本根目录
SCRIPT_FOLDER=lottery
@@ -61,7 +62,7 @@ docker run \
$DOCKER_REPO \
start" \
> start.sh
chmod 777 start.sh
chmod +x start.sh
echo "create check.sh"
echo -e "#!/bin/bash\n\
@@ -72,7 +73,7 @@ docker run \
$DOCKER_REPO \
check" \
> check.sh
chmod 777 check.sh
chmod +x check.sh
echo "create clear.sh"
echo -e "#!/bin/bash\n\
@@ -83,4 +84,4 @@ docker run \
$DOCKER_REPO \
clear" \
> clear.sh
chmod 777 clear.sh
chmod +x clear.sh
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd ..
cd ..
npm i
npm run check
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd ..
cd ..
npm i
npm run clear
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd ..
cd ..
npm i
npm run start
+6 -1
View File
@@ -1,3 +1,4 @@
$README = "README.md"
$TEMPLATE_CONFIG_FILE = "my_config.example.js"
$TEMPLATE_ENV_FILE = "env.example.js"
@@ -14,6 +15,7 @@ $TRIARR = @(
Copy-Item -Path $TEMPLATE_ENV_FILE -Destination $TARGET_DIR -Force
Copy-Item -Path $TEMPLATE_CONFIG_FILE -Destination $TARGET_DIR -Force
Copy-Item -Path $README -Destination $TARGET_DIR -Force
Set-Location -Path $TARGET_DIR
@@ -30,6 +32,8 @@ foreach ($TRI in $TRIARR) {
Move-Item -Path $BIN -Destination $DIR -Force
Copy-Item -Path $ENV_FILE -Destination $DIR -Force
Copy-Item -Path $CONFIG_FILE -Destination $DIR -Force
Copy-Item -Path $README -Destination $DIR -Force
if ($DIR -eq "nlts-win-x64") {
New-Item -Path $DIR -Name "start.bat" -ItemType File -Value "@echo off && lottery start && pause" -Force
New-Item -Path $DIR -Name "check.bat" -ItemType File -Value "@echo off && lottery check && pause" -Force
@@ -40,4 +44,5 @@ foreach ($TRI in $TRIARR) {
}
Remove-Item -Path $ENV_FILE
Remove-Item -Path $CONFIG_FILE
Remove-Item -Path $CONFIG_FILE
Remove-Item -Path $README
-9
View File
@@ -1,9 +0,0 @@
chcp 65001
cd ..
cd ..
npm i
npm run check
# 暂停
pause
-9
View File
@@ -1,9 +0,0 @@
chcp 65001
cd ..
cd ..
npm i
npm run clear
# 暂停
pause
-9
View File
@@ -1,9 +0,0 @@
chcp 65001
cd ..
cd ..
npm i
npm run start
# 暂停
pause