index.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const { default: axios } = require('axios')
  2. const dayjs = require('dayjs')
  3. const duration = require('dayjs/plugin/duration')
  4. const schedule = require('node-schedule')
  5. const { baseURL, cookie, deviceId } = require('./config')
  6. require('./console')
  7. dayjs.extend(duration)
  8. // axios.defaults.baseURL = baseURL
  9. axios.interceptors.request.use(req => {
  10. req.headers['X-Requested-With'] = 'XMLHttpRequest'
  11. req.headers['Accept-Language'] = 'zh-cn'
  12. req.headers['MT-Request-ID'] = getGUID()
  13. req.headers[
  14. 'User-Agent'
  15. ] = `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}`
  16. req.headers['Referer'] =
  17. 'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2'
  18. req.headers['Cookie'] = cookie
  19. req.headers['Accept'] = 'application/json, text/javascript, */*; q=0.01'
  20. req.headers['Content-Type'] = 'application/json'
  21. req.headers['MT-APP-Version'] = '1.0.0'
  22. req.headers['Origin'] = 'https://h5.moutai519.com.cn'
  23. return req
  24. })
  25. function getGUID(key = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx') {
  26. return key.replace(/[xy]/g, function (c) {
  27. var r = (Math.random() * 16) | 0
  28. var v = c == 'x' ? r : (r & 0x3) | 0x8
  29. return v.toString(16)
  30. })
  31. }
  32. async function httpRequest(url, method = 'get', _data) {
  33. let params = ''
  34. let data = {}
  35. if (method === 'get') {
  36. params = _data
  37. } else {
  38. data = _data
  39. }
  40. return await axios({
  41. url,
  42. method,
  43. data,
  44. params
  45. })
  46. .then(d => d.data)
  47. .catch(d => {
  48. if (d.response.status === 500 && d.response.data) {
  49. return Promise.resolve(d.response.data)
  50. }
  51. console.log(d)
  52. })
  53. }
  54. function getUserIsolationPageData() {
  55. console.log()
  56. console.log('查询小茅运信息:')
  57. return httpRequest(
  58. 'https://h5.moutai519.com.cn/game/isolationPage/getUserIsolationPageData',
  59. 'get',
  60. {
  61. __timestamp: +new Date()
  62. }
  63. ).then(d => {
  64. let { energy, energyReward, xmy } = d.data
  65. console.log('当前小茅运值:', xmy)
  66. console.log('本月剩余旅行奖励:', energyReward.value)
  67. if (energyReward.value <= 0) {
  68. return Promise.reject()
  69. }
  70. if (energy < 100) {
  71. console.log('耐力不足')
  72. return Promise.reject()
  73. }
  74. })
  75. }
  76. function getXmTravelInfo() {
  77. console.log()
  78. console.log('获取旅行信息: ')
  79. return httpRequest(baseURL + 'getXmTravelInfo', 'get', {
  80. __timestamp: +new Date()
  81. }).then(d => {
  82. let { lastStartTravelTs, travelTotalTime, remainTravelCnt } = d.data
  83. let startTime = dayjs(lastStartTravelTs)
  84. let endTime = startTime.add(3, 'h')
  85. let firstTravel = !dayjs().isSame(startTime, 'day')
  86. if (firstTravel) {
  87. console.log('今日暂未开始旅行')
  88. }
  89. let finish = +new Date() - endTime.valueOf() >= 0
  90. if (!finish) {
  91. console.log('旅行暂未结束')
  92. console.log(
  93. '本次旅行开始时间: ',
  94. dayjs(lastStartTravelTs).format('YYYY-MM-DD HH:mm:ss')
  95. )
  96. console.log(
  97. '本次旅行结束时间: ',
  98. startTime.add(3, 'h').format('YYYY-MM-DD HH:mm:ss')
  99. )
  100. console.log(
  101. '本次旅行剩余时间: ',
  102. dayjs.duration(endTime - +new Date()).format('HH 小时 mm 分钟 ss 秒')
  103. )
  104. return Promise.reject()
  105. }
  106. if (!remainTravelCnt) console.log('当日旅行次数已耗尽')
  107. else console.log('剩余旅行次数: ', remainTravelCnt)
  108. return {
  109. remainTravelCnt,
  110. finish: finish && !firstTravel // 今日已首次旅行过且当前已完成
  111. }
  112. })
  113. }
  114. function getUserEnergyAward() {
  115. console.log()
  116. console.log('获取申购耐力值: ')
  117. return httpRequest(
  118. 'https://h5.moutai519.com.cn/game/isolationPage/getUserEnergyAward',
  119. 'post',
  120. {}
  121. ).then(d => {
  122. if (d.code === 2000) {
  123. console.log('耐力值领取成功')
  124. } else {
  125. console.log('耐力值领取失败', d.message || '')
  126. return Promise.reject()
  127. }
  128. })
  129. }
  130. function getXmTravelReward() {
  131. console.log()
  132. console.log('查询旅行奖励: ')
  133. return httpRequest(baseURL + 'getXmTravelReward', 'get', {
  134. __timestamp: +new Date()
  135. }).then(d => {
  136. if (d.code === 2000 && d.data.travelRewardXmy) {
  137. console.log('可获取小茅运: ', d.data.travelRewardXmy)
  138. } else {
  139. console.log('旅行暂未完成', d.message || '')
  140. return Promise.reject()
  141. }
  142. })
  143. }
  144. function receiveReward() {
  145. console.log()
  146. console.log('领取旅行奖励: ')
  147. return httpRequest(baseURL + 'receiveReward', 'post', {}).then(d => {
  148. if (d.code === 2000) {
  149. console.log('领取成功')
  150. } else {
  151. console.log('领取失败', d.message || '')
  152. return Promise.reject()
  153. }
  154. })
  155. }
  156. function startTravel() {
  157. console.log()
  158. console.log('开始旅行: ')
  159. return httpRequest(baseURL + 'startTravel', 'post', {}).then(d => {
  160. if (d.code === 2000) {
  161. console.log('开始旅行成功')
  162. } else {
  163. console.log('开始旅行失败', d.message || '')
  164. return Promise.reject()
  165. }
  166. })
  167. }
  168. async function init() {
  169. console.log('开始执行')
  170. let time = +dayjs().format('HH')
  171. if (time >= 9 && time < 20) {
  172. try {
  173. await getUserIsolationPageData()
  174. let { remainTravelCnt, finish } = await getXmTravelInfo()
  175. if (finish) {
  176. await getXmTravelReward()
  177. await receiveReward()
  178. }
  179. if (remainTravelCnt) await startTravel()
  180. } catch (e) {}
  181. } else {
  182. console.log()
  183. console.log('活动未开始')
  184. }
  185. console.log()
  186. console.log('脚本执行完毕')
  187. console.log()
  188. }
  189. init()
  190. schedule.scheduleJob('00 */30 * * * *', init) // 每半小时