123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- const { default: axios } = require('axios')
- const dayjs = require('dayjs')
- const duration = require('dayjs/plugin/duration')
- const { baseURL, cookie, deviceId, bark } = require('./config')
- require('./console')
- dayjs.extend(duration)
- let cookies = typeof cookie === 'object' ? cookie : [cookie]
- let currentCookie = ''
- const xmTravelAxios = axios.create()
- const barkAxios = axios.create()
- const TRAVEL_BASE_URL = baseURL + 'xmTravel/'
- xmTravelAxios.interceptors.request.use(req => {
- req.headers['X-Requested-With'] = 'XMLHttpRequest'
- req.headers['Accept-Language'] = 'zh-cn'
- req.headers['MT-Request-ID'] = getGUID()
- req.headers[
- 'User-Agent'
- ] = `Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/1.2.1 device-id/${deviceId}`
- req.headers['Referer'] =
- 'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2'
- req.headers['Cookie'] = currentCookie
- req.headers['Accept'] = 'application/json, text/javascript, */*; q=0.01'
- req.headers['Content-Type'] = 'application/json'
- req.headers['MT-APP-Version'] = '1.0.0'
- req.headers['Origin'] = 'https://h5.moutai519.com.cn'
- return req
- })
- function getGUID(key = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx') {
- return key.replace(/[xy]/g, function (c) {
- var r = (Math.random() * 16) | 0
- var v = c == 'x' ? r : (r & 0x3) | 0x8
- return v.toString(16)
- })
- }
- function log(...msg) {
- console.log(`账号${cookies.indexOf(currentCookie) + 1}`, ...msg)
- }
- function sendBarkMsg(msg) {
- log(msg)
- if (!bark) return false
- return barkAxios({
- method: 'get',
- url: `${bark}/${encodeURIComponent('xmtravel')}/${encodeURIComponent(
- msg
- )}?group=${encodeURIComponent('xmtravel')}`
- })
- }
- async function httpRequest(url, method = 'get', _data) {
- let params = ''
- let data = {}
- if (method === 'get') {
- params = _data
- } else {
- data = _data
- }
- return await xmTravelAxios({
- url,
- method,
- data,
- params
- })
- .then(d => d.data)
- .catch(async d => {
- if (d.response.status === 500 && d.response.data) {
- return Promise.resolve(d.response.data)
- }
- if (d.response.status === 401 && d.response.data) {
- await sendBarkMsg(`登录失效, 请更新 cookie 配置`)
- return Promise.reject('登录失效')
- }
- log(d)
- })
- }
- function getUserIsolationPageData() {
- console.log()
- log('查询小茅运信息:')
- return httpRequest(
- baseURL + 'isolationPage/getUserIsolationPageData',
- 'get',
- {
- __timestamp: +new Date()
- }
- ).then(async d => {
- // energy: 耐力值
- // xmy: 小茅运值
- let { energy, energyReward, xmy, xmTravel } = d.data
- // status: 1. 未开始 2. 进行中 3. 已完成
- // remainChance: 今日剩余旅行次数
- // travelEndTime: 旅行结束时间
- let { status, remainChance, travelEndTime } = xmTravel
- let { value } = energyReward // 可领取申购耐力值奖励
- let endTime = travelEndTime * 1000
- log('当前小茅运值:', xmy)
- if (value) {
- await getUserEnergyAward()
- energy += value
- }
- let { currentPeriodCanConvertXmyNum } = await getExchangeRateInfo()
- log('本月剩余旅行奖励:', currentPeriodCanConvertXmyNum)
- if (currentPeriodCanConvertXmyNum <= 0) {
- // 当月无可领取奖励
- return Promise.reject()
- }
- // 未开始
- if (status === 1) {
- if (energy < 100) {
- log('耐力不足, 当前耐力值:', energy)
- return Promise.reject()
- }
- }
- // 进行中
- if (status === 2) {
- log('旅行暂未结束')
- log('本次旅行结束时间: ', dayjs(endTime).format('YYYY-MM-DD HH:mm:ss'))
- log(
- '本次旅行剩余时间: ',
- dayjs.duration(endTime - +new Date()).format('HH 小时 mm 分钟 ss 秒')
- )
- return Promise.reject()
- }
- return {
- remainChance, // 剩余次数
- finish: status === 3
- }
- })
- }
- // 获取本月剩余奖励耐力值
- function getExchangeRateInfo() {
- return httpRequest(baseURL + 'synthesize/exchangeRateInfo', 'get', {
- __timestamp: +new Date()
- }).then(d => {
- let { currentPeriodCanConvertXmyNum } = d.data
- return { currentPeriodCanConvertXmyNum }
- })
- }
- function getXmTravelInfo() {
- console.log()
- log('获取旅行信息: ')
- return httpRequest(TRAVEL_BASE_URL + 'getXmTravelInfo', 'get', {
- __timestamp: +new Date()
- }).then(d => {
- let { lastStartTravelTs, travelTotalTime, remainTravelCnt, travelStatus } =
- d.data
- let startTime = dayjs(lastStartTravelTs)
- let endTime = startTime.add(3, 'h')
- let firstTravel = !dayjs().isSame(startTime, 'day')
- if (firstTravel) {
- log('今日暂未开始旅行')
- }
- let finish = travelStatus === 3
- if (!finish) {
- log('旅行暂未结束')
- log(
- '本次旅行开始时间: ',
- dayjs(lastStartTravelTs).format('YYYY-MM-DD HH:mm:ss')
- )
- log(
- '本次旅行结束时间: ',
- startTime.add(3, 'h').format('YYYY-MM-DD HH:mm:ss')
- )
- log(
- '本次旅行剩余时间: ',
- dayjs.duration(endTime - +new Date()).format('HH 小时 mm 分钟 ss 秒')
- )
- return Promise.reject()
- }
- if (!remainTravelCnt) log('当日旅行次数已耗尽')
- else log('剩余旅行次数: ', remainTravelCnt)
- return {
- remainTravelCnt,
- finish: finish && !firstTravel // 今日已首次旅行过且当前已完成
- }
- })
- }
- function getUserEnergyAward() {
- console.log()
- log('获取申购耐力值: ')
- return httpRequest(
- baseURL + 'isolationPage/getUserEnergyAward',
- 'post',
- {}
- ).then(d => {
- if (d.code === 200) {
- log('耐力值领取成功')
- } else {
- log('耐力值领取失败', d.message || '')
- return Promise.reject()
- }
- })
- }
- function getXmTravelReward() {
- console.log()
- log('查询旅行奖励: ')
- return httpRequest(TRAVEL_BASE_URL + 'getXmTravelReward', 'get', {
- __timestamp: +new Date()
- }).then(d => {
- if (d.code === 2000 && d.data.travelRewardXmy) {
- log('可获取小茅运: ', d.data.travelRewardXmy)
- return d.data.travelRewardXmy
- } else {
- log('旅行暂未完成', d.message || '')
- return Promise.reject()
- }
- })
- }
- function receiveReward(travelRewardXmy) {
- console.log()
- log('领取旅行奖励: ')
- return httpRequest(TRAVEL_BASE_URL + 'receiveReward', 'post', {}).then(d => {
- if (d.code === 2000) {
- sendBarkMsg('成功领取旅行奖励小茅运' + travelRewardXmy)
- } else {
- log('领取失败', d.message || '')
- return Promise.reject()
- }
- })
- }
- function startTravel() {
- console.log()
- log('开始旅行: ')
- return httpRequest(TRAVEL_BASE_URL + 'startTravel', 'post', {}).then(d => {
- if (d.code === 2000) {
- log('开始旅行成功')
- } else {
- log('开始旅行失败', d.message || '')
- return Promise.reject()
- }
- })
- }
- function shareReward() {
- console.log()
- log('每日首次分享可领取耐力:')
- return httpRequest(TRAVEL_BASE_URL + 'shareReward', 'post', {}).then(d => {
- if (d.code === 2000) {
- log('分享成功')
- } else {
- log('分享失败', d.message || '')
- return Promise.reject()
- }
- })
- }
- async function init() {
- console.log('开始执行')
- let time = +dayjs().format('HH')
- if (time >= 9 && time < 20) {
- for await (i of cookies) {
- currentCookie = i
- try {
- let { remainChance, finish } = await getUserIsolationPageData()
- // let { remainTravelCnt, finish } = await getXmTravelInfo()
- if (finish) {
- let travelRewardXmy = await getXmTravelReward()
- await receiveReward(travelRewardXmy)
- await shareReward()
- }
- if (remainChance) await startTravel()
- } catch (e) {}
- }
- } else {
- console.log()
- console.log('活动未开始')
- }
- console.log()
- console.log('脚本执行完毕')
- console.log()
- }
- exports.init = init
|