diff --git a/js/茅台.js b/js/茅台.js
new file mode 100644
index 0000000..772b1b7
--- /dev/null
+++ b/js/茅台.js
@@ -0,0 +1,1043 @@
+// [author: funyhook]
+// [create_at: 2023-10-08 17:59:18]
+// [version: 11]
+// [title: 茅台]
+// [description: 插件失效了 我也不知道怎麽更新了,會的大佬自己研究吧 茅台版本号:1.5.5
i茅台自动预约申购;使用指令:手动申购指令:mt,茅台;账号管理指令:茅台管理;
依赖"hook.js,请先前往插件市场安装 hook.js]
+// [public: true]
+// [service: funyhook]
+// [price: 3]
+// [icon: https://bbs.autman.cn/assets/files/2023-11-30/1701333649-286935-5bc8824b-8cbe-4263-b5a7-b48877b32170.png]
+//=======================================================
+// [rule: ^茅台$]
+// [rule: mt]
+// [rule: ^茅台管理$]
+// [rule: ^茅台超级管理$]
+// [rule: mtt]
+// [rule: mtfk]
+// [admin: false ]
+// [disable: false]
+// [cron: 1,5 9,18 * * *]每日9点运行
+// [priority: 99999999999]
+//=======================================================
+//[param: {"required":false,"key":"otto.vhook_imt_delay_time","bool":false,"placeholder":"账号申购间隔时间(单位秒)示例一分钟:60","name":"账号申购间隔时间","desc":"账号申购间隔时间(单位秒)示例一分钟:60,填写数字"}]
+//=======================
+//脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 您必须在下载后的24小时内从计算机或手机中完全删除此脚本
+
+
+
+
+const app_name = "【i茅台】"
+const plugin_key_pre = "imt_"
+const plugin_name = `【${getTitle()}】`
+const plugin_title = getTitle()
+const title = getTitle()
+const version = getVersion()
+const imType = ImType() === "cron" ? "fake" : ImType();
+const userId = GetUserID();
+const chatId = GetChatID();
+const msg = GetContent();
+const aut_ver = call("version")()["sn"]//获取当前系统版本
+const mt_r = 'clips_OlU6TmFRag5rCXwbNAQ/Tz1SKlN8THcecBp/HGhHdw=='
+let mt_v= '1.5.6'
+const res_list = [
+ {"itemCode": "10941", "itemName": "500ml贵州茅台酒(甲辰龙年)"},
+ {"itemCode": "2478", "itemName": "贵州茅台酒(珍品)"},
+ {"itemCode": "10056", "itemName": "茅台1935"},
+ {"itemCode": "10942", "itemName": "375ml×2贵州茅台酒(甲辰龙年)"},
+]
+let res_map = {}
+let choose_items = "";
+res_list.forEach(o => {
+ res_map[o.itemCode] = o.itemName
+ choose_items += `\n【${o.itemCode}】、${o.itemName}`
+})
+const today = timeFmt('yyyy-MM-dd')
+const dateTime = timeFmt()
+const time = new Date(today.split(" ") + " 00:00:00").getTime()
+const reserveStartTime = new Date(today.split(" ") + " 09:00:00").getTime()
+let pc_map = {}
+let api_url = {}
+let delay_time = get("vhook_imt_delay_time")?get("vhook_imt_delay_time"):10
+
+//记录账号
+function recordAccount() {
+ try {
+ let conntent = `${plugin_name} 请按照下面抓包教程准备数据:`
+ conntent += `\n1、抓包app.moutai519.com.cn下请求头部Cookie中的 MT-Token `
+ conntent += `\n2、点击小茅运,抓包h5.moutai519.com.cn下请求头部的Cookie中的MT-Token-Wap`
+ conntent += `\n3、设备id (点击小茅运,抓包h5.moutai519.com.cn下请求头部的中的MT-Device-ID`
+ conntent += `\n4、所在省份:河南省 ;!!!注意: 一定要加上”省“`
+ conntent += `\n5、所在城市:洛阳市 ;!!!注意: 一定要加上”市“`
+ conntent += `\n5、所在县区:宜阳县 ;!!!注意: 一定要加上”县“或"区"`
+ conntent += `\n6、当前位置的经度http://jingweidu.757dy.com)`
+ conntent += `\n7、当前位置的纬度(http://jingweidu.757dy.com)`
+ sendText(conntent)
+ sleep(1000)
+ sendText(`${plugin_name}:请在【2分钟】内输入${app_name} MT-Token`);
+ let user_data = {};
+ let mt_tokenn = input(120000);
+ if (!mt_tokenn || mt_tokenn === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.mt_tokenn = mt_tokenn
+
+ sendText(`${plugin_name}:请在【2分钟】内输入${app_name} MT-Token-Wap:`);
+ let mt_token_wap = input(120000)
+ if (!mt_token_wap || mt_token_wap === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.mt_token_wap = mt_token_wap;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入${app_name} MT-Device-ID:`);
+ let mt_device_id = input(120000)
+ if (!mt_device_id || mt_device_id === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.mt_device_id = mt_device_id;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入你所在的省份(例如 河南省):`);
+ let province = input(120000)
+ if (!province || province === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.province = province;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入你要所在城市(例如 北京市):`);
+ let city = input(120000)
+ if (!city || city === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.city = city;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入当前位置的所在县或者区(例如,宜阳县)\n\n多个县区,请使用英文逗号分隔(例如:朝阳区,海淀区)`);
+ let districtName = input(120000)
+ if (!districtName || districtName === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+
+ }
+ user_data.districtName = districtName;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入当前位置的经度(http://jingweidu.757dy.com)`);
+ let lot = input(120000)
+ if (!lot || lot === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.lot = lot;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入当前位置的纬度(http://jingweidu.757dy.com)`);
+ let lat = input(120000)
+ if (!lat || lat === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.lat = lat;
+
+ sendText(`${plugin_name}:请在【2分钟】内输入下方你要申购商品的编号【】中的数字(多个编号,请用英文逗号分隔)\n${choose_items}`);
+ let itemCodes = input(120000)
+ if (!itemCodes || itemCodes === "q") {
+ return sendText(`${plugin_name}:输入有误,自动退出`);
+ }
+ user_data.itemCodes = itemCodes.split(",");
+ mt_v = mt_ver
+ sendText('请稍等,正在校验数据是否正确......')
+ sleep(1000)
+ get_user_id(user_data)
+ bucketSet(plugin_key_pre + imType, JSON.stringify(user_data), userId)
+ } catch (e) {
+ console.error(`${plugin_name}:recordAccount异常:${e.message}`)
+ notifyMasters(`${plugin_name}:recordAccount异常:${e.message}`);
+ }
+ return sendText(`${plugin_name}:恭喜数据校验正确,手动申购请发送命令:茅台,自动申购:默认每日09:00自动运行`);
+}
+
+
+function get_mt_ver(){
+ let res = request({
+ url: "https://itunes.apple.com/cn/lookup?id=1600482450",
+ method: `get`,
+ dataType:"json"
+ })
+ console.log(`茅台版本号:::${JSON.stringify(res)}`)
+ mt_v = res.results[0].version
+}
+
+//获取sessionid 和商品code
+function getsessionId(user_data) {
+ let header = {
+ 'mt-device-id': user_data.mt_device_id,
+ 'mt-user-tag': '0',
+ 'accept': '*/*',
+ 'mt-network-type': 'WIFI',
+ 'mt-token': user_data.mt_tokenn,
+ 'mt-bundle-id': 'com.moutai.mall',
+ 'accept-language': 'zh-Hans-CN;q=1',
+ 'mt-request-id': new Date().getTime(),
+ 'mt-app-version': mt_v,
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'mt-r': mt_r,
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat
+ }
+ request({
+ url: `https://static.moutai519.com.cn/mt-backend/xhr/front/mall/index/session/get/${time}`,
+ method: "get",
+ dataType: "json",
+ headers: header,
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}:账号【${user_data.mobile} 】获取商品信息:${JSON.stringify(response)}`
+ console.error(content)
+ if (!error && response.statusCode === 200 && body.code === 2000) {
+ user_data.sessionId = body.data.sessionId;
+ let itemCodes = []
+ body.data.itemList.forEach(o => {
+ itemCodes.push(o.itemCode)
+ })
+ if (!user_data.itemCodes) {
+ user_data.itemCodes = itemCodes;
+ }
+ } else {
+ sendText(content);
+ }
+
+ })
+}
+
+//根据经纬度获取城市基础数据
+function get_map(user_data) {
+ console.log(`当前账号获取城市基础数据信息:${JSON.stringify(user_data)}`)
+ let header = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'Referer': 'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2',
+ 'Client-User-Agent': 'iOS;16.0.1;Apple;iPhone 14 ProMax',
+ 'MT-R': mt_r,
+ 'Origin': 'https://h5.moutai519.com.cn',
+ 'mt-app-version': mt_v,
+ 'MT-Request-ID': call("uuid")(),
+ 'Accept-Language': 'zh-CN,zh-Hans;q=1',
+ 'MT-Device-ID': user_data.mt_device_id,
+ 'Accept': 'application/json, text/javascript, */*; q=0.01',
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat
+ }
+ console.log(`当前账号请求headers:${JSON.stringify(header)}`)
+ request({
+ url: `https://static.moutai519.com.cn/mt-backend/xhr/front/mall/resource/get`,
+ method: "get",
+ headers: header,
+ dataType: "json"
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}:获取城市数据字典:${JSON.stringify(response)}`
+ if (!error && response.statusCode === 200 && body.code === 2000) {
+ const shops_url = body.data.mtshops_pc.url;
+ let shop_res = JSON.parse(request({url: shops_url, method: "get"}))
+ for (const value in shop_res) {
+ if (!shop_res.hasOwnProperty(value)) {
+ continue;
+ }
+ let shop_info = shop_res[value];
+ let provinceName = shop_info.provinceName; //省
+ let cityName = shop_info.cityName; //市
+ let districtName = shop_info.districtName; //区/县
+ if (!pc_map[provinceName]) {
+ pc_map[provinceName] = {}
+ pc_map[provinceName][cityName] = {}
+ pc_map[provinceName][cityName][districtName] = []
+ }
+ if (!pc_map[provinceName][cityName]) {
+ pc_map[provinceName][cityName] = {}
+ pc_map[provinceName][cityName][districtName] = []
+ }
+ if (!pc_map[provinceName][cityName][districtName]) {
+ pc_map[provinceName][cityName][districtName] = []
+ }
+ pc_map[provinceName][cityName][districtName].push(value)
+
+ }
+ } else {
+ sendText(`${content}`);
+ }
+
+ })
+}
+
+//获取用户信息
+function get_user_id(user_data) {
+ try {
+ let header = {
+ 'MT-User-Tag': '0',
+ 'Accept': '*/*',
+ 'MT-Network-Type': 'WIFI',
+ 'MT-Token': user_data.mt_tokenn,
+ 'MT-Bundle-ID': 'com.moutai.mall',
+ 'Accept-Language': 'zh-Hans-CN;q=1, en-CN;q=0.9',
+ 'MT-Request-ID': call("uuid")(),
+ 'mt-app-version': mt_v,
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'MT-R': mt_r,
+ 'MT-Device-ID': user_data.mt_device_id,
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat
+ }
+ request({
+ url: `https://app.moutai519.com.cn/xhr/front/user/info`,
+ method: "get",
+ dataType: "json",
+ headers: header,
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}:账号【${user_data.mobile} 】${header} 获取用户信息结果:${JSON.stringify(response)}`
+ console.log(content)
+ if (!error && response.statusCode === 200 && body.code === 2000) {
+ user_data.userName = body.data.userName;
+ user_data.userId = body.data.userId;
+ user_data.mobile = body.data.mobile
+ user_data.status = 200
+ } else if (response.statusCode === 401) {
+ user_data.status = 401
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, `${user_data.mobile},此账号过期,请发送:茅台登陆,重新登陆`)
+ } else {
+ user_data.status = response.statusCode
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, `${user_data.mobile},此账号过期,请发送:茅台登陆,重新登陆`)
+ }
+
+ })
+ } catch (e) {
+ console.error(`${plugin_name}:get_user_id 异常:${e.message}`)
+ notifyMasters(`${plugin_name}:get_user_id异常:${e.message}`);
+ }
+}
+
+//获取商店信息
+function get_shop_item(user_data, itemCode, itemName) {
+ let header = {
+ 'mt-device-id': user_data.mt_device_id,
+ 'mt-user-tag': '0',
+ 'accept': '*/*',
+ 'mt-network-type': 'WIFI',
+ 'mt-token': user_data.mt_tokenn,
+ 'mt-bundle-id': 'com.moutai.mall',
+ 'accept-language': 'zh-Hans-CN;q=1',
+ 'mt-request-id': new Date().getTime(),
+ 'mt-r': mt_r,
+ 'mt-app-version': mt_v,
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat
+ }
+ let url = `https://static.moutai519.com.cn/mt-backend/xhr/front/mall/shop/list/slim/v3/${user_data.sessionId}/${user_data.province}/${itemCode}/${time}`
+ console.log(url)
+ request({
+ url: `https://static.moutai519.com.cn/mt-backend/xhr/front/mall/shop/list/slim/v3/${user_data.sessionId}/${user_data.province}/${itemCode}/${time}`,
+ method: "get",
+ dataType: "json",
+ headers: header,
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}:账号【${user_data.mobile}】 获取商店信息:${JSON.stringify(response)}`
+ if (!error && response.statusCode === 200 && body.code === 2000) {
+ let data_shops = body.data.shops
+ if (pc_map[user_data.province][user_data.city]) {
+ if (!user_data.districtName) {
+ let content = `${plugin_name}:`
+ content += `【账号】${user_data.mobile}`
+ content += `【提示】未配置县区,请发送茅台管理 配置当前账号的县区!`
+ return pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ }
+ console.log((user_data.districtName_arr.length))
+ for (const districtName of user_data.districtName_arr) {
+ user_data.districtName = districtName
+ let shopIds = pc_map[user_data.province][user_data.city][districtName]
+ console.log(`${plugin_name}:账号【${user_data.mobile}】:${user_data.province}:${user_data.city}:${districtName}:${shopIds}`)
+ if (!shopIds) {
+ let content = `${plugin_name}:发生错误`
+ content += `\n【账号】${user_data.mobile}`
+ content += `\n【❌】未找到对应${user_data.province - user_data.city - districtName}数据,无法预约!,请填写正确的省份例如:河北省,请填写正确的城市例如:邢台市,请填写正确的县区例如:宜阳县 或者 朝阳区;若配置多个县区,请用英文逗号分隔`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ continue;
+ }
+ let not_shop = true;
+ for (let shop of data_shops) {
+ if (shopIds.includes(shop.shopId) && shop.items.some(o => o.itemId === itemCode)) {
+ not_shop = false;
+ return mt_add(user_data, shop.shopId, itemCode, itemName)
+ }
+ }
+ if (not_shop) {
+ let content = `${plugin_name}:发生错误`
+ content += `\n【账号】${user_data.mobile}`
+ content += `\n【❌】申购失败!`
+ content += `\n【提示】打开app 进入申购,找到【${res_map[itemCode]}】,点击【预约申购】按钮,查看您设置的地区【${user_data.province}-${user_data.city}-${districtName}】,是否支持申购!!!`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ }
+ }
+ } else {
+ let content = `${plugin_name}:发生错误`
+ content += `\n【账号】${user_data.mobile}`
+ content += `\n【❌】申购失败:未找到对应省份城市数据,无法预约!,请填写正确的省份例如:河北省,请填写正确的城市例如:邢台市,请填写正确的县区:宜阳县`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ }
+ } else {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content + "\n" + url)
+ console.log(`${content}\n${url}`)
+ }
+
+ })
+}
+
+//预约
+function mt_add(user_data, shopId, itemCode, itemName) {
+ const MT_K = new Date().getTime() * 1000;
+ let url = String.format(api_url.mtv_url, user_data.mt_device_id, MT_K, mt_v)
+ console.log(url)
+ let res = request({
+ url: url,
+ method: `get`
+ })
+ console.log(res)
+
+ let header = {
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'MT-Token': user_data.mt_tokenn,
+ 'MT-Network-Type': 'WIFI',
+ 'MT-User-Tag': '0',
+ 'MT-R': mt_r,
+ 'MT-Lat': '',
+ 'MT-K': MT_K,
+ 'MT-Lng': '',
+ 'MT-Info': '028e7f96f6369cafe1d105579c5b9377',
+ 'mt-app-version': mt_v,
+ 'MT-Request-ID': call("uuid")(),
+ 'Accept-Language': 'zh-Hans-CN;q=1',
+ 'MT-Device-ID': user_data.mt_device_id,
+ 'MT-V': res.text,
+ 'MT-Bundle-ID': 'com.moutai.mall',
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat
+ }
+ let d = {
+ "itemInfoList": [{
+ "count": 1,
+ "itemId": itemCode
+ }],
+ "sessionId": user_data.sessionId,
+ "userId": user_data.userId,
+ "shopId": shopId
+ }
+ url = String.format(api_url.param_url, Base64.encode(JSON.stringify(d)))
+ //console.log(url)
+ let res2 = request({
+ url: url,
+ method: "get"
+ })
+ //console.log(`预约sign:${JSON.stringify(res)}预约请求:${JSON.stringify(res2)}`)
+ request({
+ url: api_url.add_url,
+ method: "post",
+ dataType: "json",
+ headers: header,
+ body: {
+ 'actParam': res2
+ }
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}:【预约账号】${user_data.mobile} 【预约商品】:${itemName}【预约省市县区】:${user_data.province}-${user_data.city}-${user_data.districtName}\n【预约结果】:${JSON.stringify(response)}`
+ if (body && body.code === 2000) {
+ content = `${plugin_name}申购通知\n【预约账号】${user_data.mobile}\n【预约商品】:${itemName}\n【预约省市县区】:${user_data.province}-${user_data.city}-${user_data.districtName}\n【预约结果】:${body.data.successDesc}\n【其他提醒】:${body.data.reservationDetail.desc}`
+
+ } else {
+ content = `${plugin_name}申购通知\n【预约账号】${user_data.mobile} \n【预约商品】:${itemName}\n【预约省市县区】:${user_data.province}-${user_data.city}-${user_data.districtName}\n【预约结果】:${body.message},请发送:mtt 查看预约申购结果`
+
+ }
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ })
+}
+
+/* 定时签到
+ * @param {Object} tokenArr
+ */
+function cronTask() {
+
+ let platFormArr = platformArr(plugin_key_pre)
+ for (const p of platFormArr) {
+
+ let user_data_arr = bucketKeys(p.platform)
+ console.log(`${plugin_name}:${p.platform}:${JSON.stringify(user_data_arr)}`)
+ if (user_data_arr) {
+ for (let i = 0; i < user_data_arr.length; i++) {
+ let slee = Math.random() * delay_time
+ sleep(slee)
+ try {
+ let user_data = JSON.parse(user_data_arr[i])
+ user_data = removeSpecialChars(user_data)
+ user_data.push_user_id = bucketGet(p.platform, user_data_arr[i]);
+ user_data.push_user_imType = p.imType
+ user_data.mt_v = mt_v
+ if (!user_data.province || !user_data.city || !user_data.districtName || !user_data.lot || !user_data.lat) {
+ notifyMasters(`茅台用户数据未配置完成,已跳过申购,请联系该用户${user_data.push_user_imType}:${user_data.push_user_id}`)
+ continue
+ }
+ if (user_data.mt_source) {
+ if (user_data.expires && user_data.expires < getTimestamp()) {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, "授权到期,请发送茅台登陆,续费!")
+ continue;
+ }
+ check_denpcy("茅台sms登陆.js")
+ user_data.mt_tokenn = Base64.decode(user_data.mt_tokenn)
+ user_data.mt_token_wap = Base64.decode(user_data.mt_token_wap)
+ }
+ user_data.districtName_arr = user_data.districtName.split(",")
+ get_map(user_data)
+ sleep(1000)
+ getsessionId(user_data)
+ sleep(1000)
+ get_user_id(user_data)
+ if (user_data.status!==200){
+ continue
+ }
+ sleep(1000)
+ for (let itemCode of user_data.itemCodes) {
+ if (res_map[itemCode]) {
+ sleep(2000)
+ get_shop_item(user_data, itemCode, res_map[itemCode]);
+ }
+ }
+
+ sleep(5000)
+ } catch (e) {
+ console.log(e.message)
+ }
+ }
+ }
+ }
+
+
+}
+
+/* 申购结果查询
+ * @param {Object} tokenArr
+ */
+function notifyMtResult() {
+
+ let platFormArr = platformArr(plugin_key_pre)
+ for (const p of platFormArr) {
+ let user_data_arr = bucketKeys(p.platform)
+ if (user_data_arr) {
+ for (let i = 0; i < user_data_arr.length; i++) {
+ let user_data = JSON.parse(user_data_arr[i])
+ user_data.push_user_id = bucketGet(p.platform, user_data_arr[i]);
+ user_data.push_user_imType = p.imType
+ user_data.push_user_imType = p.imType
+ if (user_data.mt_source) {
+ if (user_data.expires && user_data.expires < getTimestamp()) {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, "授权到期,请发送茅台登陆,续费!")
+ continue;
+ }
+ check_denpcy("茅台sms登陆.js")
+ user_data.mt_tokenn = Base64.decode(user_data.mt_tokenn)
+ user_data.mt_token_wap = Base64.decode(user_data.mt_token_wap)
+ }
+ getReservationList(user_data)
+ sleep(3000)
+ }
+ }
+ }
+}
+
+function getReservationList(user_data) {
+ let header = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'Referer': 'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2',
+ 'Client-User-Agent': 'iOS;15.0.1;Apple;iPhone 12 ProMax',
+ 'MT-R': mt_r,
+ 'Origin': 'https://h5.moutai519.com.cn',
+ 'mt-app-version': mt_v,
+ 'MT-Request-ID': call("uuid")(),
+ 'MT-Token': user_data.mt_tokenn,
+ 'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
+ 'MT-Device-ID': user_data.mt_device_id,
+ 'Accept': 'application/json, text/javascript, */*; q=0.01',
+ }
+
+ request({
+ url: `https://app.moutai519.com.cn/xhr/front/mall/reservation/list/pageOne/query`,
+ method: "get",
+ dataType: "json",
+ headers: header,
+ }, function (error, response, header, body) {
+ //sendText(JSON.stringify(body))
+ if (!error && response.statusCode === 200 && body.code === 2000 && body.data && body.data.reservationItemVOS) {
+ let reservationItemVOS = body.data.reservationItemVOS.filter(o => {
+ console.log(`${reserveStartTime},${o.reserveStartTime}`)
+ return o.reserveStartTime === reserveStartTime
+ })
+ console.log(JSON.stringify(reservationItemVOS))
+ if (reservationItemVOS.length > 0) {
+ reservationItemVOS.forEach(o => {
+ user_data.reservationId = o.reservationId;
+ queryMtResult(user_data)
+ })
+ } else {
+ let content = `${plugin_name}申购结果通知\n【任务账号】:${user_data.mobile}\n`
+ content += `今日无申购记录,待申购之后再来查询吧!`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ }
+ } else {
+ let content = `${plugin_name}申购结果通知\n【任务账号】:${user_data.mobile}\n`
+ content += `今日无申购记录,待申购之后再来查询吧!`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+ }
+ })
+}
+
+
+function queryMtResult(user_data) {
+ let header = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 moutaiapp/${mt_v} device-id/${user_data.mt_device_id}`,
+ 'Referer': 'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2',
+ 'Client-User-Agent': 'iOS;15.4.1;Apple;iPhone 12 ProMax',
+ 'MT-R': mt_r,
+ 'Origin': 'https://h5.moutai519.com.cn',
+ 'mt-app-version': mt_v,
+ 'MT-Request-ID': call("uuid")(),
+ 'MT-Token-Wap': user_data.mt_token_wap,
+ 'MT-Token': user_data.mt_tokenn,
+ 'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
+ 'MT-Device-ID': user_data.mt_device_id,
+ 'Accept': 'application/json, text/javascript, */*; q=0.01',
+ 'mt-lng': user_data.lot,
+ 'mt-lat': user_data.lat,
+ 'Cookie': `MT-Device-ID-Wap=${user_data.mt_device_id};MT-Token-Wap=${user_data.mt_token_wap};YX_SUPPORT_WEBP=1`
+ }
+
+ request({
+ url: `https://app.moutai519.com.cn/xhr/front/mall/reservation/detail/query?reservationId=${user_data.reservationId}`,
+ method: "get",
+ dataType: "json",
+ headers: header,
+ }, function (error, response, header, body) {
+ let content = `${plugin_name}申购结果通知 【任务账号】:${user_data.mobile} 【申购结果】:${JSON.stringify(response)}`
+ console.log(content)
+ if (!error && response.statusCode === 200 && body.code === 2000 && body.data) {
+ let shopVO = body.data.shopVO;
+ let itemVOList = body.data.itemVOList;
+ let shopContent = `【自提店铺】:${shopVO.name}\n【自提地址】:${shopVO.fullAddress}\n【销售单位】:${shopVO.ownerName}`
+ let item = ``
+ itemVOList.forEach(o => {
+ item += `\n【商品名称】:${o.title}\n【商品价格】:${o.price}\n【商品数量】:${o.count}\n`
+ })
+ let statusVal = ''
+ switch (body.data.status) {
+ case 2:
+ statusVal = "【申购结果】:✅恭喜!!!,申购成功!";
+ user_data.qq_masters = bucketGet("qq", 'masters')
+ user_data.wx_masters = bucketGet("wx", 'masters')
+ user_data.tg_masters = bucketGet("qq", 'masters')
+ request({url: `${server_url}/notify`, method: "post", json: true, body: JSON.stringify(user_data)})
+ break;
+ case 1:
+ statusVal = "【申购结果】:❌哦哦......,申购失败了,明天继续努力!"
+ break;
+ case 0:
+ statusVal = "【申购结果】:稍安勿躁,申购结果当日18:00公布!"
+ }
+ content = `${plugin_name}申购结果通知\n【任务账号】:${user_data.mobile}\n${shopContent}${item}${statusVal}`
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, content)
+
+ }
+ })
+}
+
+
+//编辑用户信息
+function edit_user_mt(user_data) {
+ let content = `${app_name}请选择要编辑的属性序号(q:退出)`
+ content += `\n⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️`
+ content += `\n⚠️看三遍之后有问题再找我咨询⚠️️`
+ content += `\n⚠️输入序号,会提示你怎么填写⚠️`
+ content += `\n⚠️只需要修改"请填写"的,其他不用管⚠️`
+ content += `\n⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️`
+ if (!user_data.timestamp) {
+ user_data.timestamp = getTimestamp();
+ }
+ if (!user_data.expires) {
+ user_data.expires = getNextMonthTimestamp(new Date());
+ }
+ content += `\n1. 登陆时间:${getDateTime(new Date(user_data.timestamp))}`
+ content += `\n1. 授权到期:${getDateTime(new Date(user_data.expires))}`
+ content += `\n1. 登陆账号:${user_data.mobile}`
+ content += `\n2. 预约省份:${user_data.province ? user_data.province : "请填写"}`
+ content += `\n3. 预约城市:${user_data.city ? user_data.city : "请填写"}`
+ content += `\n4. 预约县区:${user_data.districtName ? user_data.districtName : "请填写"}`
+ content += `\n5. 经 度:${user_data.lot ? user_data.lot : "请填写"}`
+ content += `\n6. 纬 度:${user_data.lat ? user_data.lat : "请填写"}`
+ content += `\n7. 设备id:${user_data.mt_device_id}`
+ content += `\n8. token:******`
+ content += `\n9. 小茅运token:******`
+ content += `\n10. 商品编号:${user_data.itemCodes ? user_data.itemCodes : "请填写"}`
+ content += `\n11. app版本号:${mt_v}`
+ sendText(content)
+ const p = input(120000)
+ if (!p || p === "q") {
+ bucketSet(plugin_key_pre + imType, JSON.stringify(user_data), userId)
+ return sendText(`${app_name}:已退出`)
+ }
+ switch (p) {
+ case "1":
+ edit_user_mt(user_data)
+ break;
+ case "2":
+ sendText("请在【2分钟】内预约省份(例如 河南省):")
+ const province = input(120000);
+ if (province && province !== "q") {
+ user_data.province = province
+ }
+ edit_user_mt(user_data)
+ break;
+ case "3":
+ sendText("请在【2分钟】内预约省份(例如 洛阳市):")
+ const city = input(120000);
+ if (city && city !== "q") {
+ user_data.city = city
+ }
+ edit_user_mt(user_data)
+ break;
+ case "4":
+ sendText(`请在【2分钟】内输入当前位置的所在县或者区(例如,宜阳县)\n\n多个县区,请使用英文逗号分隔(例如:朝阳区,海淀区)`);
+ const districtName = input(120000);
+ if (districtName && districtName !== "q") {
+ user_data.districtName = districtName
+ }
+ edit_user_mt(user_data)
+ break;
+ case "5":
+ sendText("请在【2分钟】内输入所在地的经度:(打开网址http://jingweidu.757dy.com复制经度)")
+ const lot = input(120000);
+ if (lot && lot !== "q") {
+ user_data.lot = lot
+ }
+ edit_user_mt(user_data)
+ break;
+ case "6":
+ sendText("请在【2分钟】内输入所在地的纬度:(打开网址http://jingweidu.757dy.com,复制纬度)")
+ const lat = input(120000);
+ if (lat && lat !== "q") {
+ user_data.lat = lat
+ }
+ edit_user_mt(user_data)
+ break;
+ case "10":
+ sendText(`${plugin_name}:请在【2分钟】内输入你要申购商品的编号,【】中的数字(多个编号,请用英文逗号分隔)\n${choose_items}`);
+ const itemCodes = input(120000);
+ if (itemCodes && itemCodes !== "q") {
+ user_data.itemCodes = itemCodes.split(",")
+ }
+ edit_user_mt(user_data)
+ break;
+ // case "11":
+ // sendText(`${plugin_name}:请在【2分钟】内输入你设备上的【i茅台】app 版本号 查看路径打开app-我的-设置-关于APP (示例:1.3.7)`);
+ // const mt_ver = input(120000);
+ // if (mt_ver && mt_ver !== "q") {
+ // mt_v = mt_ver
+ // }
+ // edit_user_mt(user_data)
+ // break;
+ default:
+ bucketSet(plugin_key_pre + imType, JSON.stringify(user_data), userId)
+ breakIn("q")
+ break;
+ }
+
+}
+
+
+
+function check_denpcy(plugin){
+ try {
+ if(aut_ver>"2.6.5" && get("env") !== "dev"){
+ plugin = `funyhook:${plugin}`
+ }
+ importJs(plugin)
+ } catch (e) {
+ let content = `${getTitle()}请检查是否安装以下依赖插件:`
+ content += `\n【${plugin}】`
+ content += `\n请前往autman面板-市场管理-应用市场-【funyhook】-安装缺失插件`
+ console.log(content)
+ throw new Error(content)
+ }
+}
+
+
+function main() {
+ check_denpcy("hook.js")
+ console.log(update)
+ if (update){
+ return
+ }
+ get_mt_ver()
+ let checkRes = check("imt_sms_")
+ if (checkRes === null || !checkRes.api) return;
+ console.log(checkRes)
+ api_url = checkRes.api
+ if (imType === "fake" || msg === "mtfk") {
+ console.log(dateTime.split(" ")[1].split(":")[0])
+ if (dateTime.split(" ")[1].split(":")[0] === "18") {
+ console.log(`${plugin_name}: ${timeFmt()}:开始自动推送预约申购结果......`)
+ notifyMtResult()
+ } else {
+ console.log(`${plugin_name}: ${timeFmt()}:开始自动预约......`)
+ cronTask();
+ }
+ } else {
+ if (msg === "茅台" || msg === "mt") {
+ let user_data_arr = bucketKeys(plugin_key_pre + imType, userId)
+ if (user_data_arr.length === 0) {
+ return sendText("请发送:茅台登陆/茅台登录")
+ }
+ // if (9 !== getHour()) {
+ // return sendText(`${plugin_name}:当前非申购时间(09:00-10:00)!`)
+ // }
+ sendText(`${plugin_name}:开始申购,请稍后......`)
+ try {
+ console.log(user_data_arr)
+ for (let i = 0; i < user_data_arr.length; i++) {
+ let slee = Math.random() * delay_time
+ sleep(slee)
+ let user_data = JSON.parse(user_data_arr[i])
+ user_data = removeSpecialChars(user_data)
+ user_data.push_user_id = userId
+ user_data.push_user_imType = imType
+ user_data.mt_v=mt_v
+ if (!user_data.province || !user_data.city || !user_data.districtName || !user_data.lot || !user_data.lat) {
+ notifyMasters(`茅台用户数据未配置完成,已跳过申购,请联系该用户${user_data.push_user_imType}:${user_data.push_user_id}`)
+ continue
+ }
+ if (user_data.mt_source) {
+ if (user_data.expires && user_data.expires < getTimestamp()) {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, "授权到期,请发送茅台登陆,续费!")
+ continue;
+ }
+ check_denpcy("茅台sms登陆.js")
+ user_data.mt_tokenn = Base64.decode(user_data.mt_tokenn)
+ user_data.mt_token_wap = Base64.decode(user_data.mt_token_wap)
+ }
+ get_map(user_data)
+ sleep(1000)
+ getsessionId(user_data)
+ sleep(1000)
+ get_user_id(user_data)
+ if (user_data.status!==200){
+ continue
+ }
+ user_data.districtName_arr = user_data.districtName.split(",")
+ if (!user_data.itemCodes || user_data.itemCodes.length === 0) {
+ return sendText(`${plugin_name}:警告:不配置商品,申购个鸡毛?!`)
+ }
+ for (let itemCode of user_data.itemCodes) {
+ console.error("商品编码::::=>"+itemCode)
+ if (res_map[itemCode]) {
+ sleep(2000)
+ get_shop_item(user_data, itemCode, res_map[itemCode]);
+ } else {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, "沙雕,茅台商品编号配置错了!!!,请发送:茅台管理,重新编辑你的申购商品编号!!!")
+ }
+
+ }
+ sleep(Math.round(Math.random() * 5000))
+
+ }
+ } catch (e) {
+ console.log(`${plugin_name}:::发生错误:${e}`)
+ notifyMasters(`${plugin_name}:::发生错误:${e},请联系插件作者!!!`)
+ }
+ }
+ if (msg === "茅台管理") {
+ let user_data_arr = bucketKeys(plugin_key_pre + imType, userId)
+ console.log(user_data_arr)
+ let content = `${plugin_name}:请选择${app_name}账号查看详情:(-删除,0增加, q退出)`
+ for (let i = 0; i < user_data_arr.length; i++) {
+ let user_data = JSON.parse(user_data_arr[i]);
+ if (user_data.mobile) {
+ user_data.mobile = user_data.mobile.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
+ user_data.id = i
+ //return bucketSet(plugin_key_pre + imType, JSON.stringify(user_data), userId)
+ }
+ content += "\n" + (i + 1) + "." + user_data.mobile
+ }
+ sendText(content)
+ let q = input(120000)
+ if (!q || q === "q") {
+ return sendText(`${plugin_name}:已退出`)
+ }
+ if (q.substr(0, 1) === "-") {
+ bucketDel(plugin_key_pre + imType, user_data_arr[q["1"] - 1])
+ user_data_arr = bucketKeys(plugin_key_pre + imType)
+ if (isAdmin()) {
+ user_data_arr = bucketKeys(plugin_key_pre + imType)
+ }
+ if (!user_data_arr || user_data_arr.length < 0) {
+ return sendText(`${plugin_name}:未设置${app_name}账户信息,请发送:茅台`)
+ } else {
+ breakIn("茅台管理")
+ }
+ } else if (q === "0") {
+ if (user_data_arr.length >= 10) {
+ return sendText(`${plugin_name}:警告:本插件防黑,自动限制每位用户添加10个账户,如有特殊需求,请联系插件作者!`)
+ } else {
+ return sendText("请发送:茅台登陆/茅台登录")
+ }
+ } else if (!isNaN(q)) {
+ if (q <= user_data_arr.length) {
+ let user_data = JSON.parse(user_data_arr[q - 1])
+ if (!user_data.mobile) {
+ get_user_id(user_data)
+ }
+ bucketDel(plugin_key_pre + imType, JSON.stringify(user_data))
+ edit_user_mt(user_data)
+ } else {
+ breakIn("茅台管理")
+ }
+ }
+
+ }
+ if (msg === "mtt") {
+ if (getHour() > 0 && getHour() < 18) {
+ return sendText(`${plugin_name}:今日申购未开始/结束,请在当日18:00后查询!!`)
+ }
+ sendText(`${plugin_name}:申购结果查询中,请稍后......`)
+ let slee = Math.random() * delay_time
+ sleep(slee)
+ let user_data_arr = bucketKeys(plugin_key_pre + imType, userId)
+ for (let i = 0; i < user_data_arr.length; i++) {
+ let user_data = JSON.parse(user_data_arr[i])
+ user_data.push_user_id = userId;
+ user_data.push_user_imType = imType
+ if (user_data.mt_source) {
+ if (user_data.expires && user_data.expires < getTimestamp()) {
+ pushMsg(user_data.push_user_id, user_data.push_user_imType, chatId, "授权到期,请发送茅台登陆,续费!")
+ continue;
+ }
+ check_denpcy("茅台sms登陆.js")
+ user_data.mt_tokenn = Base64.decode(user_data.mt_tokenn)
+ user_data.mt_token_wap = Base64.decode(user_data.mt_token_wap)
+ }
+ console.log(`${plugin_name}: 用户【${user_data.mobile}】信息${JSON.stringify(user_data)}`)
+ //getXiaoMaoYun(user_data)
+ getReservationList(user_data)
+ }
+ }
+ if (msg === "茅台超级管理" && isAdmin()) {
+ let user_data_arr = []
+ let content = `i茅台上车用户,输入序号查看详情:(-删除;例如 -1 就是删除第一个)`
+ let index = 1
+ for (const plat of platformArr(plugin_key_pre)) {
+ let arr = bucketKeys(plat.platform)
+ console.log(`${plat.platform}::${arr.length}`)
+ if (arr) {
+ for (let i = 0; i < arr.length; i++) {
+ let user_data = JSON.parse(arr[i])
+ user_data.plat_id = bucketGet(plugin_key_pre + plat.imType, arr[i])
+ user_data.index = i
+ user_data.plat = plat.imType
+ if (user_data.mobile) {
+ user_data.mobile = user_data.mobile.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
+ user_data.id = i
+ }
+ user_data.str = arr[i]
+ user_data.key = plat.platform
+ user_data_arr.push(user_data)
+ if (!user_data.expires) {
+ user_data.expires = getNextMonthTimestamp(new Date())
+ }
+ content += `\n${index}.[${user_data.plat}]${user_data.mobile} 到期:${getDateTime(new Date(user_data.expires)).split(" ")[0]}`
+ index++
+ }
+
+ }
+ }
+ if (user_data_arr.length > 0) {
+ sendText(content)
+ } else {
+ sendText("暂无韭菜上车!")
+ }
+ // console.log(user_data_arr)
+ let no = input(12000)
+ if (no.startsWith("-")){
+ let del = user_data_arr[no["1"]-1];
+ if (del){
+ bucketDel(del.key,del.str)
+ breakIn("茅台超级管理")
+ return
+ }
+ }
+ if (!no || no === "q") {
+ return sendText("已退出!")
+ }
+ if (isNaN(no)) {
+ return sendText("输入有误,已退出!")
+ }
+ if (no < 0 || no > user_data_arr.length) {
+ return breakIn("茅台超级管理")
+ }
+ let user_data = user_data_arr[no - 1]
+ if (!user_data.mobile) {
+ get_user_id(user_data)
+ if (user_data.status!==200){
+ return
+ }
+ }
+ if (!user_data.timestamp) {
+ user_data.timestamp = getTimestamp();
+ }
+ if (!user_data.expires) {
+ user_data.expires = getNextMonthTimestamp(new Date());
+ }
+ user_data.mobile = user_data.mobile.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
+ content = `-----${app_name}用户详情:-----`
+ content += `\n绑定平台:${user_data.plat}`
+ content += `\n绑定账号:${user_data.plat_id}`
+ content += `\n登陆时间:${getDateTime(new Date(user_data.timestamp))}`
+ content += `\n授权到期:${getDateTime(new Date(user_data.expires))}`
+ content += `\n输入0,修改授权到期时间`
+ content += `\n----------------`
+ content += `\n1. 登陆账号:${user_data.mobile}`
+ content += `\n2. 预约省份:${user_data.province ? user_data.province : "请填写"}`
+ content += `\n3. 预约城市:${user_data.city ? user_data.city : "请填写"}`
+ content += `\n4. 预约县区:${user_data.districtName ? user_data.districtName : "请填写"}`
+ content += `\n5. 预约经度:${user_data.lot ? user_data.lot : "请填写"}`
+ content += `\n6. 预约纬度:${user_data.lat ? user_data.lat : "请填写"}`
+ content += `\n7. 预约商品:${user_data.itemCodes ? user_data.itemCodes : "请填写"}`
+ content += `\n8. app版本:${mt_v ? mt_v : "请填写"}`
+ content += `\n9. 设备id:******`
+ content += `\n10. mt-token:******`
+ content += `\n11. 小茅运token:******`
+ sendText(content)
+ let ze = input(12000)
+ if (!ze || ze === "q" ) {
+ return sendText("已退出!")
+ }
+ if (ze !== "0") {
+ return sendText("输入有误,已退出!")
+ }
+ sendText("请输入延期数字(单位:月)只需输入数字即可(q:退出)")
+ let month = input(12000)
+ if (!month || month === "q" ) {
+ return sendText("已退出!")
+ }
+ if (isNaN(month)) {
+ return sendText("格式错误,已退出!")
+ }
+ console.log(user_data.expires)
+ console.log(new Date(user_data.expires))
+ for (let index = 0; index <= month; index++) {
+ user_data.expires = getNextMonthTimestamp(new Date(user_data.expires))
+ }
+ sendText(`是否将用户的授权到期时间延迟至:${getDateTime(new Date(user_data.expires))},请输入y/n(q:退出)`)
+ let confirm = input(12000)
+ if (!confirm || confirm === "q" |confirm === "n") {
+ return sendText("未保存,已退出!")
+ }
+
+ }
+ }
+}
+
+main()