mirror of
https://github.com/matiaoer/ql.git
synced 2025-12-17 15:24:36 +08:00
300 lines
8.5 KiB
JavaScript
300 lines
8.5 KiB
JavaScript
/*
|
||
阿里云盘自动签到
|
||
使用教程:https://github.com/Stonewuu/aliyundrive_autosign
|
||
|
||
cron "0 9/1 * * *" autoSignin.js, tag=阿里云盘签到
|
||
const $ = new Env("阿里云盘签到");
|
||
*/
|
||
|
||
const axios = require('axios')
|
||
const { initInstance, getEnv, updateCkEnv } = require('./qlApi.js')
|
||
const notify = require('./sendNotify')
|
||
|
||
const updateAccesssTokenURL = 'https://auth.aliyundrive.com/v2/account/token'
|
||
const signinURL =
|
||
'https://member.aliyundrive.com/v2/activity/sign_in_list?_rx-s=mobile'
|
||
const rewardURL =
|
||
'https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile'
|
||
const rewardURLV2 =
|
||
'https://member.aliyundrive.com/v2/activity/sign_in_task_reward?_rx-s=mobile'
|
||
const vipInfoURLV2 =
|
||
'https://member.aliyundrive.com/v2/activity/vip_day_info'
|
||
const vipRewardURLV2 =
|
||
'https://member.aliyundrive.com/v2/activity/vip_day_reward'
|
||
|
||
|
||
// 使用 refresh_token 更新 access_token
|
||
function updateAccesssToken(queryBody, remarks) {
|
||
const errorMessage = [remarks, '更新 access_token 失败']
|
||
return axios(updateAccesssTokenURL, {
|
||
method: 'POST',
|
||
data: queryBody,
|
||
headers: { 'Content-Type': 'application/json' }
|
||
})
|
||
.then(d => d.data)
|
||
.then(d => {
|
||
const { code, message, nick_name, refresh_token, access_token } = d
|
||
if (code) {
|
||
if (
|
||
code === 'RefreshTokenExpired' ||
|
||
code === 'InvalidParameter.RefreshToken'
|
||
)
|
||
errorMessage.push('refresh_token 已过期或无效')
|
||
else errorMessage.push(message)
|
||
return Promise.reject(errorMessage.join(', '))
|
||
}
|
||
return { nick_name, refresh_token, access_token }
|
||
})
|
||
.catch(e => {
|
||
errorMessage.push(e.message)
|
||
return Promise.reject(errorMessage.join(', '))
|
||
})
|
||
}
|
||
|
||
//签到列表
|
||
function sign_in(access_token, remarks) {
|
||
const sendMessage = [remarks]
|
||
return axios(signinURL, {
|
||
method: 'POST',
|
||
data: {
|
||
isReward: false
|
||
},
|
||
headers: {
|
||
Authorization: access_token,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
.then(d => d.data)
|
||
.then(async json => {
|
||
if (!json.success) {
|
||
sendMessage.push('签到失败', json.message)
|
||
return Promise.reject(sendMessage.join(', '))
|
||
}
|
||
|
||
sendMessage.push('签到成功')
|
||
|
||
const { signInInfos, signInCount } = json.result
|
||
const currentSignInfo = signInInfos[signInCount - 1] // 当天签到信息
|
||
|
||
sendMessage.push(`本月累计签到 ${signInCount} 天`)
|
||
|
||
for await(signInInfo of signInInfos){
|
||
if(signInInfo.status === 'normal'){
|
||
const signInDay = signInInfo.day
|
||
const rewards = signInInfo.rewards
|
||
for await(reward of rewards){
|
||
if(reward.status === 'finished'){
|
||
//领取奖励
|
||
if(reward.type === 'dailySignIn'){
|
||
// 签到奖励
|
||
const rewardInfo = await getReward(access_token, signInDay)
|
||
sendMessage.push(
|
||
`\n第${signInDay}天签到奖励领取成功: 获得${rewardInfo.name || ''}${rewardInfo.description || ''},领取要求:${reward.remind}`
|
||
)
|
||
}
|
||
if(reward.type === 'dailyTask'){
|
||
// 任务奖励
|
||
const rewardInfo = await getTaskReward(access_token, signInDay)
|
||
sendMessage.push(
|
||
`\n第${signInDay}天任务奖励领取成功: 获得${rewardInfo.name || ''}${rewardInfo.description || ''},领取要求:${reward.remind}`
|
||
)
|
||
}
|
||
|
||
}else{
|
||
if(signInCount == signInDay){
|
||
|
||
if(reward.type === 'vipDay'){
|
||
// 任务奖励
|
||
const vipInfo = await getVipInfo(access_token, signInDay)
|
||
|
||
if(vipInfo.isVip){
|
||
const vipReward = await getVipReward(access_token, signInDay)
|
||
if(vipReward){
|
||
sendMessage.push(
|
||
`\n第${signInDay}天VIP日奖励领取成功: 获得:${reward.name || ''}${reward.rewardDesc || ''},领取要求:${reward.remind}`
|
||
)
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
// 已完成领取
|
||
sendMessage.push(
|
||
`\n第${signInDay}天${reward.type==='dailySignIn'?'签到':'任务'}奖励领取状态:${reward.status === 'verification'? '已领取' : reward.status === 'unfinished'? '任务未完成': reward.status}, 奖励内容:${reward.name || ''}${reward.rewardDesc || ''},领取要求:${reward.remind}`
|
||
)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return sendMessage.join(', ')
|
||
})
|
||
.catch(e => {
|
||
sendMessage.push('签到失败')
|
||
sendMessage.push(e.message)
|
||
return Promise.reject(sendMessage.join(', '))
|
||
})
|
||
}
|
||
|
||
// 领取奖励
|
||
function getReward(access_token, signInDay) {
|
||
return axios(rewardURL, {
|
||
method: 'POST',
|
||
data: { signInDay },
|
||
headers: {
|
||
authorization: access_token,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
.then(d => d.data)
|
||
.then(json => {
|
||
if (!json.success) {
|
||
return Promise.reject(json.message)
|
||
}
|
||
|
||
return json.result
|
||
})
|
||
}
|
||
|
||
// 领取奖励
|
||
function getTaskReward(access_token, signInDay) {
|
||
return axios(rewardURLV2, {
|
||
method: 'POST',
|
||
data: { signInDay },
|
||
headers: {
|
||
authorization: access_token,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
.then(d => d.data)
|
||
.then(json => {
|
||
if (!json.success) {
|
||
return Promise.reject(json.message)
|
||
}
|
||
|
||
return json.result
|
||
})
|
||
}
|
||
|
||
// 领取奖励
|
||
function getVipReward(access_token, signInDay) {
|
||
return axios(vipRewardURLV2, {
|
||
method: 'POST',
|
||
data: { signInDay },
|
||
headers: {
|
||
authorization: access_token,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
.then(d => d.data)
|
||
.then(json => {
|
||
if (!json.success) {
|
||
return Promise.reject(json.message)
|
||
}
|
||
|
||
return json.result
|
||
})
|
||
}
|
||
// 领取奖励
|
||
function getVipInfo(access_token, signInDay) {
|
||
return axios(vipInfoURLV2, {
|
||
method: 'POST',
|
||
data: { signInDay },
|
||
headers: {
|
||
authorization: access_token,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
.then(d => d.data)
|
||
.then(json => {
|
||
if (!json.success) {
|
||
return Promise.reject(json.message)
|
||
}
|
||
|
||
return json.result
|
||
})
|
||
}
|
||
|
||
// 获取环境变量
|
||
async function getRefreshToken() {
|
||
let instance = null
|
||
try {
|
||
instance = await initInstance()
|
||
} catch (e) {}
|
||
|
||
let refreshToken = process.env.refreshToken || []
|
||
try {
|
||
if (instance) refreshToken = await getEnv(instance, 'refreshToken')
|
||
} catch (e) {}
|
||
|
||
let refreshTokenArray = []
|
||
|
||
if (Array.isArray(refreshToken)) refreshTokenArray = refreshToken
|
||
else if (refreshToken.indexOf('&') > -1)
|
||
refreshTokenArray = refreshToken.split('&')
|
||
else if (refreshToken.indexOf('\n') > -1)
|
||
refreshTokenArray = refreshToken.split('\n')
|
||
else refreshTokenArray = [refreshToken]
|
||
|
||
if (!refreshTokenArray.length) {
|
||
console.log('未获取到refreshToken, 程序终止')
|
||
process.exit(1)
|
||
}
|
||
|
||
return {
|
||
instance,
|
||
refreshTokenArray
|
||
}
|
||
}
|
||
|
||
!(async () => {
|
||
const { instance, refreshTokenArray } = await getRefreshToken()
|
||
|
||
const message = []
|
||
let index = 1
|
||
for await (refreshToken of refreshTokenArray) {
|
||
let remarks = refreshToken.remarks || `账号${index}`
|
||
const queryBody = {
|
||
grant_type: 'refresh_token',
|
||
refresh_token: refreshToken.value || refreshToken
|
||
}
|
||
|
||
try {
|
||
const { nick_name, refresh_token, access_token } =
|
||
await updateAccesssToken(queryBody, remarks)
|
||
|
||
if (nick_name && nick_name !== remarks)
|
||
remarks = `${nick_name}(${remarks})`
|
||
|
||
// 更新环境变量
|
||
if (instance) {
|
||
let params = {
|
||
name: refreshToken.name,
|
||
value: refresh_token,
|
||
remarks: refreshToken.remarks || nick_name // 优先存储原有备注信息
|
||
}
|
||
// 新版青龙api
|
||
if (refreshToken.id) {
|
||
params.id = refreshToken.id
|
||
}
|
||
// 旧版青龙api
|
||
if (refreshToken._id) {
|
||
params._id = refreshToken._id
|
||
}
|
||
await updateCkEnv(instance, params)
|
||
}
|
||
|
||
const sendMessage = await sign_in(access_token, remarks)
|
||
console.log(sendMessage)
|
||
console.log('\n')
|
||
message.push(sendMessage)
|
||
} catch (e) {
|
||
console.log(e)
|
||
console.log('\n')
|
||
message.push(e)
|
||
}
|
||
index++
|
||
}
|
||
await notify.sendNotify(`阿里云盘签到`, message.join('\n'))
|
||
})()
|